node项目开发

创建router

router文件夹下创建 UserRouer.js

const express = require("express");
const router = express.Router();
const UserController = require("../controllers/UserController"); // 引入controller
router.post("/user/login", UserController.login); // 登录
router.get("/user/logout", UserController.logout);// 登出

module.exports = router;

在app.js中引入路由

const UserRouter = require("./routes/UserRouter");
app.use(UserRouter);

创建controller

创建controllers文件夹
创建UserController.js文件

const UserServices = require("../services/UserService"); //引入 service
const jwt = require("../util/JWT"); // 引入jsonwebtoken  -- token
const UserController = {
	login: async (req, res) => {
		const result = await UserServices.login(req.body); // 登录验证账号,返回数组
		if (result.length == 0) {// 没找到对应账号
            // 返回错误
			res.send({ code: 401, msg: "用户名或密码不匹配" });
			return;
		}
        // 组装返回前端项目json数据
		let data = {
			...result[0]._doc,
			id: result[0]._id,
			aaa: 12,
		};
        // 创建token
		const token = jwt.generate(
			{
				name: data.username,
				id: data.id,
			},
			"7d"
		);
        // 设置响应头 授权token
		res.header("Authorization", `Bearer ${token}`);
        // 返回给前端数据
		res.send({ code: 200, msg: "登录成功", data: { ...data } });
	},
	logout: (req, res) => {
		res.send({ code: 200, msg: "退出成功" });
	},
};
module.exports = UserController;

创建service

创建services文件夹
创建UserService.js文件

const UserModel = require("../modules/UserModel"); // 引入mongoDb 模块

const UserService = {
	login: async ({ username, password }) => {
		return UserModel.find({// 查询数据库
			username,
			password,
		});
	},
};

module.exports = UserService;

创建modules

创建modules文件夹
创建UserModule.js文件

const mongoose = require("mongoose");// 调用mongoose
const Schema = mongoose.Schema;

const UserType = {// 数据格式
	username: String,
	password: String,
	gender: Number, // 性别, 0,1,2
	instanceof: String,
	avatar: String,
	role: Number,
};

const UserModel = mongoose.model("user", new Schema(UserType, {
    timestamps: true, // 自动添加创建时间和修改时间字段
}));
module.exports = UserModel;

创建 config

创建config文件夹
创建db.config.js文件

const mongoose = require("mongoose");
mongoose.connect("mongodb://127.0.0.1:27017/nodeceshi");// 链接本地mongodb数据库

在bin/www中引入db.config.js

require("../config/db.config");

创建 JWT

创建util文件夹
创建JWT.js文件

const jsonwebtoken = require("jsonwebtoken"); // 引入jsonwentoken
const secret = "your_secret_key"; // 秘钥
const JWT = {
	generate(value, expires) { // 创建token
		return jsonwebtoken.sign(value, secret, { expiresIn: expires });
	},
	verify(token) {// 验证token
		try {
			return jsonwebtoken.verify(token, secret);
		} catch {
			return false;
		}
	},
};
module.exports = JWT;

在app.js中引入jwt,创建中间件验证接口token是否过去

const jwt = require("./util/JWT");// 引入
app.use((req, res, next) => {//创建中间件
	const Whitelist = ["/admin/user/login"]; // 不参与检查token的白名单,例如登录接口
	if (Whitelist.includes(req.url)) {
		next();
		return;
	}
	const token = req.headers.authorization.split(" ")[1]; // 截取请求头中的token
	const payload = jwt.verify(token);// 验证token
	if (payload) {
        // 通过后创建新的token
		const newToken = jwt.generate(
			{
				name: payload.name,
				id: payload.id,
			},
			"7d"
		);
        // 重新设置响应头token
		res.header("Authorization", `Bearer ${newToken}`);
        // 继续
		next();
		return;
	}
    // 返回token过期,前端通过接口状态401做处理
	res.status(401).send({ msg: "token过期" });
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值