美文网首页
基于nodejs、mongodb之外卖平台后端接口开发文档(二)

基于nodejs、mongodb之外卖平台后端接口开发文档(二)

作者: 风中凌乱的男子 | 来源:发表于2021-06-24 21:27 被阅读0次
    1. 第一步,我们先来实现前台的注册登录接口。首先设计模型,在根目录下新建文件夹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)
    
    1. 相对应的在routers文件夹内新建user.js(这就是为什么模型文件建议首字母大小),注册登录接口需要用到几个插件blueimp-md5、jsonwebtoken (md5加密插件、jwt生成token插件)
    cnpm install blueimp-md5 jsonwebtoken --save
    
    1. user.js内编写代码
    var express = require('express');
    var router = express.Router();
    /* 这中间等会要引入其他插件和模型 **/
    //引入md5插件
    var md5 = require('blueimp-md5')
    //引入模型
    var User = require("../models/User"); //引入模块模型
    /* 开发接口在这中间编写代码 **/
    module.exports = router;
    
    1. 因为注册接口需要生成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
    }
    
    1. 在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;
    
    1. 最重要的一步,我们要在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);
    
    1. 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
    接下一章

    相关文章

      网友评论

          本文标题:基于nodejs、mongodb之外卖平台后端接口开发文档(二)

          本文链接:https://www.haomeiwen.com/subject/xzxgyltx.html