Express 中 server 和 路由分离

概述

在使用 Express 框架 做项目时,如果将所有的路由都写到一个js文件里(如app.js),随着项目越来越复杂,这个文件将越来越难维护。实际上在做大型项目时,通常会按业务功能模块分离出不同的路由模块。

路由分离项目框架

下面是通过 express-generator 应用生成器工具生成的 Web应用,该项目将路由分模块放到了routes路径下。

express web应用目录结构

说明:
node_modules:存放package.json中配置的模块;
public:存放image,css,js文件;
routes:存放路由文件;
views:存放模板文件;
app.js:启动文件,Web应用入口;
package.json:存放模块依赖,当使用命令 npm install 的时候,会自动检查package下配置的模块,并把模块安装到node_modules中

express.Router() 介绍

从Express 4.0开始,顶层的express对象有一个Router()方法,可以使用Router()来创建一个新的router对象,router可以当做小型的express应用程序一样,可以在其上添加中间件和HTTP动词方法(如get,put,post等)

var express = require("express");
var app = express();			// 创建一个应用实例
var router1 = express.Router();	// 创建router1路由实例
var router2 = express.Router();	// 创建router2路由实例

// router.all(path, [callback, ...] callback) 方法会匹配当前router所有的HTTP动作
// path默认为 *,如果指定则仅作用于指定的path对应的HTTP动作,如下仅为当前router下 /user 开头的路由对应的HTTP方法 加载 express.json() 中间件
router1.all('/user/*', express.json());

// router.param(name, callback) ,给路由参数添加回调触发器,用于路径参数的处理
// callback回调方法的参数按序是请求对象,响应对象,下个中间件,参数名
// 不像 app.param(),router.param()不接受一个数组作为路由参数
router1.param('userid',function (req,res,next,id){
   
    req.userid = id;
    next();
});

// router.METHOD(path, [callback, ...] callback) 用法同 app.METHOD()
router1.get('/user/demo', (req, res) => res.send(req.method+'  '+req.originalUrl+'  '+req.userid));  // req.userid = undefined,因为仅当路由包含 router.param(name,callback) 中的name时,才会触发callback
router1.post('/user/:userid', (req, res) => res.
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小青龍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值