V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yamada
V2EX  ›  Node.js

write after end 错误

  •  
  •   yamada · 2016-08-20 11:06:22 +08:00 · 2504 次点击
    这是一个创建于 3054 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以下是简化的代码:

    let server = http.createServer(async function (req, res) {
        let req2 = web.request({
                hostname: reqUrl.hostname,
                path: reqUrl.path,
                method: req.method,
                headers: headers,
                agent: false,
            }, function (res2) {
                res.on('error', function (e) { if (e) { console.log(Date() + ':res.error,' + e.message); } err(e, res); });
                res2.on('error', function (e) { if (e) { console.log(Date() + ':res2.error,' + e.message); } err(e, res); });
                res.writeHead(res2.statusCode, res2.statusMessage, res2.headers);
                res2.pipe(res);
            });
            req2.setTimeout(10 * 1000, function (e) { if (e) { console.log(Date() + ':req2.timeout,' + e.message); } err(e, res); });
            req2.on('error', function (e) { if (e) { console.log(Date() + ':req2.error,' + e.message); } err(e, res); });
            req.pipe(req2);
    })
    

    问题是为什么偶尔会出现打印出 res.error,write after end ?

    一般来说 write after end 是在 end 之后继续调用 write 才会触发的错误吧?我这里没有调用任何 end 和 write ,只有 pipe ,是 pipe 内部有错误么?

    3 条回复    2016-09-04 00:08:14 +08:00
    meteor
        1
    meteor  
       2016-08-20 14:28:38 +08:00
    async function (req, res) {}
    是什么用法?
    yamada
        2
    yamada  
    OP
       2016-08-20 23:19:39 +08:00
    @meteor es7
    mason961125
        3
    mason961125  
       2016-09-04 00:08:14 +08:00
    一般是没有等回调完成就发送请求。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   989 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 21:24 · PVG 05:24 · LAX 13:24 · JFK 16:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.