express实现多级路由文件

在express开发的过程中无比需要对路由的合理分配,以及多极路由的合理部署:

1. 首先在入口文件server.js中,注册核心主路由:

const express = require('express');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const app = express();

//根据不同的功能 划分模块 (动态)
//app.use('/admin',require('./routers/admin.js'));
app.use(cookieParser());
app.use(bodyParser.json());
app.use('/user',require('./routers/user.js'));
app.use('/',require('./routers/main.js'));


app.listen(9093,(res,req)=>{
    console.log('Node app start at port 9093');
});




2. 在对应目录下“/routers”下,再次定义路由:

2-1. main.js下实现了 主路由 “/” : 

const app = require('express');
const router = app.Router();
const https = require('https');

var str = '';
router.get('/',(req,res)=>{
    var str = '';
    var req = https.get('https://www.sojson.com/open/api/weather/json.shtml?city=%E6%B7%B1%E5%9C%B3',(ress)=>{
        
        ress.on('data', (d) => {
            str += d;
        });

        ress.on('end',(e)=>{
            //console.log(str);
            res.json(str);
        })
    })
})


module.exports = router;


2-2. user.js 下 实现了  "/user/info" 、"/user/register"、"/user/login"、"/user/list" 等路由:

const app = require('express');
const utility = require('utility'); //加密模块
const router = app.Router();
const UserModel = require('../model.js');  //数据库结构
const User = UserModel.getModel('user');
const filter = { pwd:0, __v:0 }


router.get('/info',function(req,res,next){
    //1. cookie校验
    //res.json({ 'name': 'admin','isLogin': false });
    let cookie = req.cookies;
    
    if(!cookie.userid){
        return res.json({code:1,isLogin:false,msg:'用户未登录'});  
    }

    //查询该用户ID是否存在
    User.findOne({_id:cookie.userid},filter,function(err,doc){
        if(err){
            return res.json({code:1,isLogin:false,msg:'服务器出现错误'});
        }
        return res.json({code:0,isLogin:true,msg:'用户已登陆',data:doc});
    })

});


// 注册响应 /user/register
router.post('/register',function(req,res){
    const {user, pwd, type} = req.body;
    //查询是否已经存在该用户
    User.findOne({user},(err,doc)=>{
        if(doc){
            return res.json({code:1,msg:'该用户已存在'})
        }

        let userModel = new User({user, type, pwd: encryption(pwd) });
        userModel.save((err,doc)=>{
            if(err){
                return res.json({code:1,msg:'服务器出现错误'})
            }
            res.cookie('userid',doc._id);
            return res.json({code:0,msg:'注册成功'})
        })
    })
});

// 登陆响应 /user/login
router.post('/login',(req,res)=>{
    const {user, pwd} = req.body;
    //查询是否能够匹配用户名密码保持一直的字段
    User.findOne({user,pwd:encryption(pwd)},filter,(err,doc)=>{
        if(doc){
            res.cookie('userid',doc._id);
            return res.json({code:0,msg:'登陆成功',data:doc})
        }

        return res.json({code:1,msg:'用户名或密码错误'})
    })
})


router.get('/list',function(req,res,next){
    User.find({},function(err,doc){
        return res.json(doc);
    })
});

router.get('/remove',function(req,res,next){
    User.remove({},function(err,doc){
        return res.json(doc);
    })
});



//加密
function encryption(pwd){
    //默认前缀
    var front = '!!!WEB#@2018_account_';
    return utility.md5(utility.md5(front+pwd));f
}


module.exports = router;


3. 在子路由文件中需要导出路由模块: 
 
     module.exports = router;

猜你喜欢

转载自blog.csdn.net/wu5229485/article/details/81045938