nodejs项目实战(带源码)

主要实现功能

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

用户模块

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

文章分类模块

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

文章模块

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

核心代码

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

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

这个中间件是用来解析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")    
})

数据库配置文件,重点是要记得导出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

剩下的就是路由模块,以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

路由处理函数
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
        })
    })
}

运行项目 node app.js

数据库

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

完整代码

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yijianace

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值