- 第一步,我们先来实现前台的注册登录接口。首先设计模型,在根目录下新建文件夹models,文件夹内新建User.js(用户表模型)ps:(建议首字母大写) 代码如下:
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const userSchema = new Schema({
loginame: { type: String, required: true },
password: { type: String },
identity: { type: String, default: 'noVip' },//用户身份,默认不是会员,为后期开通会员功能做准备
phone: { type: String },
date: { type: Date, default: Date.now }
})
module.exports = User = mongoose.model("User", userSchema)
- 相对应的在routers文件夹内新建user.js(这就是为什么模型文件建议首字母大小),注册登录接口需要用到几个插件blueimp-md5、jsonwebtoken (md5加密插件、jwt生成token插件)
cnpm install blueimp-md5 jsonwebtoken --save
- user.js内编写代码
var express = require('express');
var router = express.Router();
/* 这中间等会要引入其他插件和模型 **/
//引入md5插件
var md5 = require('blueimp-md5')
//引入模型
var User = require("../models/User"); //引入模块模型
/* 开发接口在这中间编写代码 **/
module.exports = router;
- 因为注册接口需要生成token,我们需要先封装一个生成和解析token的方法,在根目录下新建utils文件夹,内建token.js,代码编写如下:
var jwt = require('jsonwebtoken');
var jwtScrect = 'aoaoe'; //签名
//登录接口 生成token的方法
var setToken = function(_id, loginame, identity, phone) {
return new Promise((resolve, reject) => {
//expiresln 设置token过期的时间
//{ loginame: loginame, _id: _id } 传入需要解析的值( 一般为用户名,用户id 等)
const rule = { _id: _id, loginame: loginame, identity: identity, phone: phone };
const token = jwt.sign(rule, jwtScrect, { expiresIn: '1day' });
resolve(token)
})
}
//各个接口需要验证token的方法
var getToken = function(token) {
return new Promise((resolve, reject) => {
if (!token) {
console.log('token是空的')
reject({
error: 'token 是空的'
})
} else {
//第二种 改版后的
var info = jwt.verify(token, jwtScrect);
resolve(info); //解析返回的值(sign 传入的值)
}
})
}
module.exports = {
setToken,
getToken
}
- 在user.js内引入 token.js,最后的代码如下:
var express = require('express');
var router = express.Router();
/* 这中间等会要引入其他插件和模型 **/
//引入md5插件
var md5 = require('blueimp-md5')
//引入模型
var User = require("../models/User");
//引入token.js
var vertoken = require('../utils/token')
/* 开发接口在这中间编写代码 **/
module.exports = router;
- 最重要的一步,我们要在app.js内引入模型和路由
ps:项目自己生成的
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
要删掉他!!!
下面相关联的地方也要删除!!
app.use('/', indexRouter);
app.use('/users', usersRouter);
在他的位置引入我们的user.js,并且也要use一下
var userRouter = require('./routes/user');
app.use('/client/api', userRouter);
- ok,下面开始开发注册接口,接口代码如下:
//注册接口,接口我测试过,没问题!如果你失败了,请仔细翻文档自己找问题
router.post('/register', (req, res) => {
const newUser = new User({ // 用户传参
loginame: req.body.loginame,
password: md5(req.body.password),
});
const loginame = req.body.loginame;
User.find({ loginame: loginame }, (err, docs) => {
if (docs.length > 0) {
res.json({
code: 200,
message: '用户名已存在'
})
} else { // 向集合中保存数据
newUser.save(err => {
const data = err ? {
code: -1,
message: '系统出错,攻城狮正在加急处理中...',
data: err.errors
} : {
code: 200,
message: '注册成功'
}
res.json(data);
});
}
})
});
注册接口end
接下一章
网友评论