以下代码有问题。我正在尝试使用管道向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);
}
答案 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方法,标头和 实体数据将被发送。