Express - 呼叫需要一次许多路由

时间:2017-03-18 22:59:25

标签: javascript node.js express

我的项目目录如下所示:

MyProject
    -app.js
    -routes
        -routeone
        -routetwo

在我的app.js文件中,它看起来像这样:

var express = require('express');
var app = express();

var routeone = require('./routes/routeone');
var routetwo = require('./routes/routetwo');

app.use('/routeone', routeone);
app.use('/routetwo', routetwo);
.
.
.

每个路径文件看起来像这样:

var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({
    extended: false
});

router.post('/', urlencodedParser, function(req, res, next) {
    if (!req.body.param) {
        //no parameter was provided
    } else {
        //there was a parameter provided
    }
});

module.exports = router;

正如您所看到的,我依赖于bodyparser模块。我需要在每个路由中调用此模块并为此指定选项。将来可能会有更多路由。我想避免在每个路由文件中指定这个,因为我需要在将来更改extended:true我必须转到每个文件并更改它。我希望在一个地方有这个。我尝试将其添加到app.js文件中,但是然后urlencodedParser可以在路径文件中找到。我还假设这会影响性能,因为每个路由都需要加载这个模块。

2 个答案:

答案 0 :(得分:1)

一些选择:

1)将身体解析器中间件放在Expression.Add对象上的一个地方,而不是放在每条路线上。

2)创建一个新模块,提取公共代码,并为您创建路由器中间件的路由器:

app

然后,使用该新模块创建每个路由器。如果/当您需要更改var router = express.Router(); var bodyParser = require('body-parser'); var urlencodedParser = bodyParser.urlencoded({ extended: false }); router.use(urlencodedParser); module.exports = router; 时,您可以在一个地方更改它。

3)创建一个新模块,它只能为您提供可在每个路由器中使用的常见extended: false中间件功能

urlencodedParser

然后,要求进入每个模块并在每个路由器中使用导入的解析器。

答案 1 :(得分:0)

只需变量: var urlencodedParserF = bodyParser.urlencoded({ extended: false }); var urlencodedParserT = bodyParser.urlencoded({ extended: true });