nodejs的请求和管道问题

时间:2020-05-06 21:44:02

标签: node.js

以下代码有问题。我正在尝试使用管道向URL发出POST请求(json),但出现“后写”错误-内部服务器错误。有人可以帮忙吗?

test: function( req, res, next) {
 var requesty = request.post({
            url: dataUrl,
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(body)
        });
        req.pipe(requesty).on('error', function (error) {
            logger.withRequestLog(res, 'error', 'CC Melville Proxy failed!', {
                assetUrl: dataUrl,
                error: error,
            });
            next(error);
        }).pipe(res);
}

1 个答案:

答案 0 :(得分:0)

由于body: JSON.stringify(body),您遇到了错误。您不能(也不需要)传递主体,就像在传递原始字节一样。另外,此中间件应该是第一个,因为您不想使用bodyParser等,它会读取流并将其清空。

下面是一个工作示例,其中我将请求代理到一条路由(也可以是外部路由):

const express = require('express');
const app = express();
const request = require('request');
const bodyParser = require('body-parser').json();
const dataUrl = '/employees'

app.use(dataUrl, bodyParser, (req, res)=>{
  res.json({
    body: req.body || {},
    method: req.method,
    param: req.params,
    headers: req.headers,
    url: req.url
  });
})
app.use('/', (req, res) => {
  var requesty = request({
    url: 'http://localhost:8080'+dataUrl,
    headers: {
      'Content-Type': 'application/json'
    },
  })
  req.pipe(requesty).on('error', function (error) {
    console.log('error', 'CC Melville Proxy failed!', {
      assetUrl: dataUrl,
      error: error,
    });
  }).pipe(res);
});

app.listen(8080, () => {
  console.log('started');
})

注意:您无需指定方法,因为它会自动传递。来自doc

您还可以通过管道从http.ServerRequest实例以及 http.ServerResponse实例。 HTTP方法,标头和 实体数据将被发送。