Ant*_*shy 22 middleware node.js express loopbackjs body-parser
我看到LoopBack内置了Express 3.x中间件.确实,身体解析器在loopback/node_modules.但我无法弄清楚如何将其用作中间件.我从未使用Express 3.x,所以也许就是这样.require显然,除非我在我的项目中安装body-parser作为依赖项,否则它不起作用.
我该怎么做server.js才能使用body-parser来解析web表单req.params?这就是它的作用,对吧?
Ant*_*shy 51
经过几个小时的挫折之后,我就把它添加到middleware.json这样:
"parse": {
"body-parser#json": {},
"body-parser#urlencoded": {"params": { "extended": true }}
}
Run Code Online (Sandbox Code Playgroud)
它作为依赖项安装.现在我req.body在我的路线中有表格数据.我server/boot/routes.js看起来像这样:
module.exports = function(app) {
app.post('/mailing_list', function(req, res) {
console.log(req.body.email);
res.send({"status": 1, "message": "Successfully added to mailing list."})
});
}
Run Code Online (Sandbox Code Playgroud)
Ben*_*son 25
为了更清楚地知道如何使这个工作(因为我在找到这个答案后仍然挣扎了一段时间!),这里是我采取的步骤:
如上所述,在$ APP_HOME/server/middleware.json中,将body-parser添加到"parse"部分:
{
"initial:before": {
"loopback#favicon": {}
},
"initial": {
"compression": {},
"cors": {
"params": {
"origin": true,
"credentials": true,
"maxAge": 86400
}
}
},
"session": {
},
"auth": {
},
"parse": {
"body-parser#json": {},
"body-parser#urlencoded": {"params": { "extended": true }}
},
"routes": {
},
"files": {
},
"final": {
"loopback#urlNotFound": {}
},
"final:after": {
"errorhandler": {}
}
}
Run Code Online (Sandbox Code Playgroud)
接下来,我将解析器设置添加到$ APP_HOME/server/server.js:
var loopback = require('loopback');
var bodyParser = require('body-parser');
var multer = require('multer');
var boot = require('loopback-boot');
var app = module.exports = loopback();
app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
app.use(multer()); // for parsing multipart/form-data
app.start = function() {
...
...
cont'd
Run Code Online (Sandbox Code Playgroud)
然后,由于我不想搞乱自定义路由,我将以下内容添加到$ APP_HOME/common/models/model.js:
module.exports = function(Model) {
Model.incoming = function(req, cb) {
cb(null, 'Hey there, ' + req.body.sender);
}
Model.remoteMethod(
'incoming',
{ accepts: [
{ arg: 'req', type: 'object', http: function(ctx) {
return ctx.req;
}
}],
returns: {arg: 'summary', type: 'string'}
}
);
};
Run Code Online (Sandbox Code Playgroud)
我现在可以用$> slc run运行我的应用程序.
当我发布到端点时,它现在可以正确解析,并且一切都很好.我希望这有助于其他人!
我正在使用loopback 2.14.0:
要在自定义bootscript路径中使用body-parser,您只需要:
1)安装body-parser
npm install body-parser --save
2)在middleware.json中注册该模块
"parse": {
"body-parser#json": {},
"body-parser#urlencoded": {"params": { "extended": true }}
},
Run Code Online (Sandbox Code Playgroud)
无需在server.js中设置解析器设置,当您注册中间件时,loopback会为您执行此操作.
请注意,正文解析器现在安装在源"node_modules"目录以及loopback模块目录中.
如果可能的话尝试注册环回文档中描述的自定义远程方法.
以这种方式注册路由使您可以开箱即用地访问loopback的body-parser,并且是"最干净"的实现.
| 归档时间: |
|
| 查看次数: |
14386 次 |
| 最近记录: |