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

express实现多级路由文件相关推荐

  1. express中间件和路由教程

    一.路由 1.通常HTTP URL的格式是这样的:http://host[:port][path] http表示协议. host表示主机. port为端口,可选字段,不提供时默认为80. path指定 ...

  2. vue3.0+ts+element-plus多页签应用模板:多级路由缓存

    目录 系列文章 一.先说点啥 1. 为啥需要路由缓存? 2. 怎么实现路由缓存? 二.路由扁平化 三.定义tag模块处理路由缓存 四.切换路由时加入缓存 五.使用keep-alive 系列文章 vue ...

  3. react-router多级路由设置默认子路由

    react-router多级路由设置默认子路由 最终效果图 目录文件路径 代码 最终效果图 目录文件路径 代码 src/App.js 多级路由的Route配置不能加 exact, 否则子路由匹配不进去 ...

  4. nodejs的express实现上传文件到七牛

    本文实现上传文件到七牛,动态切换上传空间,MD5设置key值,点击复制七牛返回的链接. 在七牛中注册开发者,获取key 七牛官网--管理控制台(偏右上角)--个人中心(获取秘钥)--对象存储,新建存储 ...

  5. 用Gitee Pages服务在线预览vue3前端项目:静态网站+多级路由+history模式(踩坑)

    目录 目标与前提 vue打包.预览遇到的坑以及原因 坑①:静态网站打开一片空白 坑②:子路由刷新或直接输入时,网页一片空白或404 坑③:首页加载时间过长 坑④:线上预览地址出错时,不显示404页面 ...

  6. vue路由文件自动化处理

    你还在一个个路由文件引入而烦恼吗 你还被别人说,你只是一个只会ctrl+ c ctrl +v的码仔吗 可是 做个与世无争的垃圾不好吗 global.ts // 可以把检测的类型去掉,转成js// 关键 ...

  7. 渲染静态页面、get请求、post请求、express框架、路由、中间件

    1. 渲染静态页面 const http = require('http'); const fs = require('fs'); const url = require('url'); const ...

  8. 【Vue路由】多级路由、路由传参、命名路由、params使用

    文章目录 多级路由 案例实验 总结 路由传参 案例实验 总结 命名路由 路由的params参数 多级路由 案例实验 我们尝试做出如下的效果: 首先项目结构: 我们直接看四个路由组件: About.vu ...

  9. React多级路由 React子路由

    React多级路由 React子路由设置 新建一个Home.jsx文件 和Home.css文件 css文件内容就不写了 Home 文件内容如下 为了解决点击Link时,路由变化而子路由页面未变化,所以 ...

最新文章

  1. JSBinding+SharpKit / 菜单介绍
  2. Robots at Warehouse(搜索+vector的使用)
  3. 第四届AutoDL挑战赛——AutoSpeech2019正式开赛
  4. 深入理解 Java 垃圾回收机制
  5. 刷新SqlServer所有视图【存储过程】
  6. Java实例化后自动执行_Java的实例化顺序(程序执行顺序)
  7. QT 5.12.9 +VS 2019配置并实现与三菱Q系列PLC通讯功能(1)软件的安装
  8. 【php】相对路径/绝对路径报错?
  9. vue项目IE浏览器中打不开,为空白页
  10. Autowired注解与Resource注解的区别
  11. 去追寻,趁我们还年轻。
  12. 第三周上机实践项目 项目4--委派任务
  13. jenkins自动打包报错:cannot find symbol
  14. 【pytest】(六) pytest中fixture的使用
  15. 移动端rem字体大小适配
  16. 服务器到底是个什么东东?跟电脑有啥区别?
  17. 预测算法——指数平滑法
  18. 西安~培养我的文艺范儿
  19. 一次美团外卖apk分析学习
  20. 数据分析——数据处理

热门文章

  1. pts-xyz-obj-stl-laz-lvx-las-pcd-txt-ply 批量转换工具 3.0 更新
  2. 1024云赛事|选择您最感兴趣的赛道,有机会瓜分好礼
  3. linux和window时间不一致,linux时间与Windows时间不一致的解决
  4. 论文阅读笔记|2023 AAAI 多模态论文研读
  5. python脚本传递参数
  6. 传统行业互联网化的商业模式分析框架
  7. antd的switch组件传参
  8. 山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(十四)-任意文件下载漏洞(2)
  9. 连锁门店订货补货 集中采购信息化解决方案
  10. 几个必备的IDA pro插件