当前位置:   article > 正文

nodejs项目实战(带源码)_nodejs项目源码

nodejs项目源码

主要实现功能

本项只适合新手,是一个接口类的项目,主要涉及一些增删改查功能以及三方包的使用,主要包括用node实现写用户登录注册,添加删除文章,添加删除分类的接口等,完整代码在末尾

用户模块

用户登录
用户注册
查询用户信息
更新用户信息
重置用户密码
更换用户头像

文章分类模块

获取文章分类
添加分类
根据id删除分类
根据id获取分类
根据id跟新分类

文章模块

获取所有文章信息
添加文章
删除文章

核心代码

项目入口文件app.js
cors 处理跨域请求
expressJWT 验证token字符串
app.use(express.json()) 解析前端发送的json数据

app.use(expressJWT({secret:'123456'}).unless({path:[/^\/api\//]}))
  • 1

这个中间件是用来解析token,并验证除/api开头以外的所有接口访问都需要token

const express = require('express')
const cors = require('cors')
const expressJWT = require("express-jwt");

const app = express()


//处理跨域请求
app.use(cors())

//解析数据
app.use(express.json())      
// app.use(express.urlencoded({extends:false}))


//解析token
app.use(expressJWT({secret:'123456'}).unless({path:[/^\/api\//]}))


//路由模块
const userRouter = require("./router/user.js")
app.use('/api',userRouter)
const userInfo = require("./router/userInfo.js")
app.use('/my',userInfo)
const artcate = require("./router/artcate.js")
app.use('/my',artcate)
const article = require("./router/article.js")
app.use('/my',article)

//错误级别中间级
app.use((err,req,res,next)=>{
    if (err) {
        console.error(err.message);
        res.status(err.status || 500).json({ error: err.message });
    }
})

app.listen(3000,()=>{
    console.log("serve is running at http://127.0.0.1:3000")    
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

数据库配置文件,重点是要记得导出module.exports = db

const mysql = require('mysql')

const db = mysql.createPool({
    host:"127.0.0.1",
    user:"root",
    password:"123456",
    database:"my_db"
})

module.exports = db
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

剩下的就是路由模块,以user为例其他都是类似的
user.js

const express = require('express')

//导入路由对应的处理函数
const userHandler = require("../router_handler/user.js")

const router = express.Router()


//注册
router.post('/register',userHandler.regUser)

//登录
router.post('/login',userHandler.login)

module.exports = router
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

路由处理函数
bcrypt 加密用户密码
jwt 生成token

const db = require("../db/index.js")

const bcrypt = require('bcryptjs')

const jwt  = require("jsonwebtoken")

const secretKey = "123456"

//用户注册处理函数
exports.regUser = (req,res)=>{
    const data = req.body

    const sql = "select*from tb_users where username = ?"
    db.query(sql,data.username,(err,result)=>{
       if(err || result.length>0){
        return res.json({
            code:400,
            msg:"用户已存在"
        })
       }

        const sqlStr = "insert into tb_users (username,password) values (?,?)"
        data.password = bcrypt.hashSync(data.password,10)
        db.query(sqlStr,[data.username,data.password],(err,result)=>{
            if(err){
                return res.json({
                    code:400,
                    msg:err.message
                })
            }
            res.json({
                code:200,
                msg:"注册成功"
            })
        })
    })
}

//用户登录处理函数userHandler.js
exports.login = (req,res)=>{
    const data = req.body
    const sql = "select password from tb_users where username=?"
    db.query(sql,data.username,(err,result)=>{
        if(err||result==0){
            return res.json({
                code:400,
                msg:"该用户不存在"
            })
        }
        const storedHash = result[0].password;  // 获取存储的哈希值reslut是一个数组
        const passwordMatch =bcrypt.compareSync(data.password, storedHash)
        if(!passwordMatch){
            return res.json({
                code:400,
                msg:"用户名密码不匹配"
            })
        }
        const payload = {
            username: data.username, // 用户名
            // 其他用户相关的信息可以在这里添加
        };
        const token = jwt.sign(payload,secretKey,{expiresIn:'10h'})    //  设置token 有效时长10h
        return res.json({
            code:200,
            msg:"登录成功",
            token:'Bearer '+token
        })
    })
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69

运行项目 node app.js

数据库

一共三个数据表,字段如下,可以自己建表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

完整代码

https://github.com/Traderxue/node-demo

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/118926
推荐阅读
相关标签
  

闽ICP备14008679号