我怎样才能用LoopBack使用body-parser?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (79)

我看到LoopBack具有内置的Express 3.x中间件。事实上,身体分析器在loopback/node_modules。但我无法弄清楚如何将它用作中间件。我从来没有使用Express 3.x,所以也许就是这样。require显然不起作用,除非我在我的项目中安装body-parser作为依赖项。

提问于
用户回答回答于

经过几个小时的挫折后,我只是这样加入middleware.json

"parse": {
    "body-parser#json": {},
    "body-parser#urlencoded": {"params": { "extended": true }}
}

它作为依赖项安装。现在我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."})
    });
}
用户回答回答于

为了更清楚地知道如何才能做到这一点(因为在找到答案之后我仍然挣扎了一会儿),下面是我采取的步骤:

如上所述,在$ 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": {}
  }
}

接下来,我将解析器设置添加到$ 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

然后,因为我不想混乱自定义路线,所以我将以下内容添加到$ 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'}
    }
  );
};

扫码关注云+社区

领取腾讯云代金券