在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;