在 routes.js 中使用 Express Router

Using Express Router in routes.js

我目前在 app.js 中使用如下路线:

// Router configuration
var router = express.Router();

router.route('/user')
    .get(userController.getUser)
    .post(userController.postUser);

app.use('/api', router);

是否可以将 Express 路由器路由放在另一个文件中,例如 routes.js 并从 app.js 调用?我在 routes.js 中尝试使用 app.get 并且它正在工作。但是在所有路由中添加前缀 /api 很烦人,如下所示。

module.exports = function(app){
    app.get('/user', userController.getUser);
};

或者,在 app.get 中是否也可以使用命名空间?谢谢

你不需要在app.js中声明你的路由,事实上,最好每个路由都在它自己的文件中,这样你就可以写一个routes/my_route.js 文件为:

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
    res.render('index', { title: 'Express' });
});

module.exports = router;

然后在app.js:

var express = require("express");
var myRoute = require("./routes/my_route");
var app = express();
app.use("/my-route", myRoute);

为什么不只做你正在做的事情,而是在你的路由文件中?

var express = require('express');
var router = express.Router();

router.route('/user')
    .get(userController.getUser)
    .post(userController.postUser);

module.exports = function(app) {
    app.use('/api', router);
};

那么您的 app.js 文件中就有

require('./routes.js')(app);

路由器也支持命名空间,因此您甚至可以这样做

app.use('/', require('./routes.js'));

在你的路由文件中(为了模块化,这可以跨文件拆分)

var express = require('express');
var mainRouter = express.Router();
var userRouter = express.Router();

userRouter.route('/user')
    .get(userController.getUser)
    .post(userController.postUser);

mainRouter.use('/api', userRouter);

module.exports = mainRouter;