添加bodyParser()会挂起所有api请求

时间:2016-12-07 12:50:03

标签: javascript node.js express body-parser

我需要在api代理期间通过在那里添加一些内容来编辑请求的正文,而我能想到的唯一方法是使用正文解析器来访问req.body

const compression = require('compression');
const express = require('express');
const request = require('request');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const app = express();

// Add body parser
app.use(bodyParser.json());

// Enable gZip compression
app.use(compression());

// Disable X-Powered-By header for security reasons
app.disable('x-powered-by');

// Add cookie parser
app.use(cookieParser());

// Example proxy
app.post('/api', (req, res) => {
  const url = 'https://my.api.com';
  req.pipe(request({
    url,
    headers: {
      'Content-Type': 'application/json',
      Accept: 'application/json'
    },
    auth: {
      user: 'user',
      pass: 'password'
    }
  })).pipe(res);
});

然而,只要我添加了body解析器api挂起,它就会挂起,然后超时。注意我还没有在示例中添加任何正文操作,因为我需要首先解决这个api。

1 个答案:

答案 0 :(得分:1)

您可以在 bodyParser 之前移动压缩中间件,然后在bodyParser.urlencoded之前再添加一个bodyParser.json来解析application/x-www-form-urlencoded

// Enable gZip compression
app.use(compression());

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({
   extended: true
}));

// Add body parser
app.use(bodyParser.json());