我的项目目录如下所示:
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可以在路径文件中找到。我还假设这会影响性能,因为每个路由都需要加载这个模块。
答案 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
});