javascript - express 中出现意外的 "write after end"错误

标签 javascript node.js api express

我正在尝试通过我的服务器代理来自客户端的 api 调用以获取某些第三方服务,其原因是 CORS 问题并在服务器端添加 key 。我通常通过以下方式完成它:

app.use('/someService', (req, res) => {
  let url = `https://example.com/${config.SECRET_KEY}/endpoint${req.url}`
  req.pipe(request(url).pipe(res))
})

这样我就可以在客户端使用任何 ajax 库并执行 get 请求,例如: get: '/someService/params' 它通常会遍历并执行该请求,然后通过管道回来了。然而现在我开始得到:

Error: write after end

在 express 中,我不完全确定可能导致它的原因。

最佳答案

你的管道是错误的。就像现在一样,您通过管道传输到 res 两次(.pipe() 返回传递给它的参数以实现可链接性)。

试试这个:

req.pipe(request(url)).pipe(res)

但是我应该指出,正确代理 HTTP 响应并不是那么简单,因为目前此行将始终以 HTTP 状态代码 200 进行响应,无论中间请求的远程服务器响应什么。此外,该响应中的任何 header 都不会发送到 res。考虑到这一点,您可以天真地尝试以下操作:

var proxiedRes = req.pipe(request(url));
proxiedRes.on('response', function(pres) {
  res.writeHead(pres.statusCode, pres.headers);
  // You will want to add a `pres` 'error' event handler too in case
  // something goes wrong while reading the proxied response ...
  pres.pipe(res);
});

关于javascript - express 中出现意外的 "write after end"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39080601/

相关文章:

java - 没有 Java 的 ClojureScript

javascript - 如何使用nodejs标记m4a音乐

javascript - 使用建议扩展搜索框

javascript - 访问键修饰符似乎不起作用

javascript - React Hooks setState 的意外结果

node.js - 使用归档器,其中输出是缓冲区

javascript - Robot Framework - 执行 JavaScript 命令不起作用

php - Instagram API订阅,如何获取帖子?

javascript - 在 Google Analytics API 中使用和查询自定义维度

java - 为什么我无法导入 GoogleSignInClient 类?