mongod.exe --dbpath + db路径
/routes/UserRouter.js
const express = require('express');
const router = express.Router();
const UserControllers = require('../../controllers/admin/UserControllers')
// 登录
router.post('/adminapi/user/login', UserControllers.login);
module.exports = router;
创建jwt
/util/jwt.js
// 生成token
const jsonwebtoken = require('jsonwebtoken');
const secret = '22222';
const jwt = {
// 生成token
generate(user, expires) {
return jsonwebtoken.sign(user, secret, { expiresIn: expires })
},
// 验证token
verify(token) {
try {
return jsonwebtoken.verify(token, secret);
} catch (error) {
return false
}
},
}
module.exports = jwt;
创建模型 约束返回数据类型
/models/UserModel.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const UserType = ({
username: String,
password: String,
sex: Number, //性别 0,1,2
introduct: String,
role: Number,
avatar: String //管理员 1,0
})
// 会将数据放在数据库的users集合里面
const UserModel = mongoose.model('users', new Schema(UserType))
module.exports = UserModel;
创建控制器 返回接口请求的数据
/controllers/UserControllers.js
const UserService = require('../../services/admin/UserService');
const jwt = require('../../util/jwt');
const UserControllers = {
// 登录
login: async (req, res) => {
// 去数据库里查询输入的用户名和密码是否存在,返回一个数组
const result = await UserService.login(req.body);
if (result.length == 0) {
res.send({
code: '-1',
error: '用户名或密码错误',
})
} else {
// 通过用户名,密码,生成唯一的一个token
const token = jwt.generate({
_id: result[0]._id,
username: result[0].username,
password: result[0].password
}, '1d');
// 请求接口
res.header('Authorization', token);
// 请求返回的数据
res.send({
ActionType: 'ok',
data: {
_id: result[0]._id,
username: result[0].username,
sex: result[0].sex ? result[0].sex : 0,
introduct: result[0].introduct,
avatar: result[0].avatar,
role: result[0].role
}
})
}
},
}
module.exports = UserControllers;
创建服务 对数据库进行增删改查
/services/UserService.js
const UserModel = require('../../models/UserModel');
const UserService = {
login: async ({ username, password }) => {
return UserModel.find({ username, password });
},
}
module.exports = UserService;
app.js
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
// 需要添加的代码 start
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var UsersRouter = require('./routes/admin/UserRouter');
const jwt = require('./util/jwt');
// 需要添加的代码 end
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
// 需要添加的代码 start
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use((req, res, next) => {
if (req.url === '/adminapi/user/login') {
next();
return;
} else {
// 获取token
const token = req.headers["authorization"].split(' ')[1];
if (token) {
// 验证token
var payload = jwt.verify(token);
if (payload) {
// var newToken = jwt.generate({
// _id: payload._id,
// username: payload.username
// }, '1d')
// res.headers('Authorization', newToken);
next();
} else {
res.status(401).send({errCode: '-1', errorInfo: 'token过期'})
}
} else {
res.send({
code: '401',
message: '未登录,无法访问该页面'
})
}
}
})
app.use('/public/', express.static('./public/'))
// 将接口路由放在全局
app.use(UsersRouter);
// 需要添加的代码 end
// catch 404 and forward to error handler
app.use(function (req, res, next) {
next(createError(404));
});
// error handler
app.use(function (err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;