【问题标题】:Express & Casper: Can't set headers after they are sentExpress & Casper:发送后无法设置标题
【发布时间】:2015-03-17 22:48:49
【问题描述】:

我在发布到 URL 后尝试运行 SpookyJS(CasperJS 的驱动程序)脚本时收到 Can't set headers after they are sent 错误。我发现了其他几篇关于人们使用 Express 运行此问题的帖子,这与多次发送的标头有关。我只是不确定这与我在这里所做的事情有什么关系。我必须有res.send 才能发送请求的状态,对吧?因为如果我没有它,表格就不会发布。

有什么想法我在这里做错了吗?

app.post('/submit', function (req, res) {
    // Send callback
    res.send(req.status);

    var spooky = require('spooky').create({   
        verbose: true,
        logLevel: 'debug',
        userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',
        pageSettings: {
            loadImages:  false,
            loadPlugins: false
        }
    });

    spooky.start('http://google.com', function () {
        this.echo(this.getTitle());
    });

    // Run Spooky
    spooky.run();
});

【问题讨论】:

  • 你好。我发现无法安装 spookyjs。你能发布你的 package.json 文件吗?

标签: javascript express phantomjs casperjs spookyjs


【解决方案1】:

错误"Error: Can't set headers after they are sent." 表示您已经处于 Body 或 Finished 状态,并且正在尝试写入 header。

你在回调开始时有这个res.send(req.status);,在这之后你试图做一些更多的操作,这些操作试图设置一个标题或状态码,但正文已经被写入。所以你看到了这个错误。

你应该在最后发送响应,更重要的是尝试理解 node.js 的异步行为。

res.send(req.status);移动到回调的最后一行,你的代码就可以工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 2017-08-11
    相关资源
    最近更新 更多