路由设计

路由设计 以用户注册为例介绍如何闭环
用户注册开发注意点:(1)使用邮箱注册(2)验证邮箱是否注册 【目前真实开发业务大部分都是手机号注册,这块由于没有购买短信服务】

clipboard.png

首先,在routers文件夹下新建user.js

clipboard.png

clipboard.png
上图中checkEmail、reg对应真实业务逻辑

现附上checkEmail、reg业务实现代码

/**
 * user controllers
 * add by wwj
 * 2019-05-03 20:52:05
 */
var co = require('co');
var md5 = require('blueimp-md5'); //md5 加密
var i18n = require('i18n'); //i18n 国际化
var utils = require('../libs/utils'); //工具类
var User = require('../models/index').User; //用户
// var tokenService = require('../services/token'); //token服务

module.exports = {
    /**
     * 检测邮箱是否注册checkEmail
     */
    checkEmail:function(req, res, next) {
        //参数
        var params = req.query || req.params;
        //变量
        var email = utils.trim(params.email);
        if(!email){
            utils.handleJson({
                response: res,
                msg: i18n.__('success'),
                result: {
                    emailHadReg:false,
                },
            });
        }
        co(function*() {
            var userResult = yield User.findOne({
                where: {
                    email: email,
                },
            });
            var result =  false;
            if(userResult){
                result = true;
            }
            //success
            utils.handleJson({
                response: res,
                msg: i18n.__('success'),
                result: {
                    emailHadReg:result,
                },
            });
        }).catch(function(error) {
            //err
            utils.handleError({
                response: res,
                error: error,
            });
        });
    },
    /**
     * 注册 post
     */
    reg: function(req, res, next) {
        var params = req.body;
        //变量
        var email = utils.trim(params.email);
        var password = utils.trim(params.password);
        //检查用户名、密码是否为空
        if (!email || !password) {
            utils.handleJson({
                response: res,
                msg: i18n.__('emailOrPwdNull'),
            });
            return;
        }
        //检查是否注册过
        co(function*() {
            var userResult = yield User.findOne({
                where: {
                    email: email,
                },
            });
            //用户已被注册
            if (userResult) {
                utils.handleJson({
                    response: res,
                    msg: i18n.__('emailHadReg'),
                });
                return;
            }
            userResult = yield User.create({
                email: email,
                password: md5(password),
                state: "1", //先默认已激活状态 //状态 0未激活邮箱、1已激活邮箱
            });
            if (!userResult) { //注册失败
                utils.handleJson({
                    response: res,
                    msg: i18n.__('regFail'),
                });
                return;
            }
            //成功入库
            var user = userResult.dataValues;
            //删除密码
            delete user.password;
            //success
            utils.handleJson({
                response: res,
                msg: i18n.__('regSuccess'),
                result: {
                    user: user,
                    // accessToken: tokenService.setToken({
                    //     uuid: user.uuid
                    // }), //token
                },
            });
        }).catch(function(error) {
            //err
            utils.handleError({
                response: res,
                error: error,
            });
        });
    },
};

【自测环节】使用Postman来测试验证接口正确性

Postman下载
https://www.getpostman.com/
http://chromecj.com/web-devel...

先将项目跑起来

npm run dev

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

RESTful API

RESTful API 最佳实践
http://www.ruanyifeng.com/blo...
Nodejs RESTFul架构实践之api篇
https://my.oschina.net/nodeon...

以本项目为例,查询用户信息和更新用户信息接口 可根据不同请求方式来实践

clipboard.png


wangwenjie1314
152 声望34 粉丝

前端