【问题标题】:Node error cannot set headers after they send节点错误在发送后无法设置标头
【发布时间】:2015-06-06 15:07:09
【问题描述】:

我是 nodeJs 的新手,我想从系统中读取文件, 我能够在控制台中看到文件内容,但在浏览器中看不到,我

我在这里错过了什么?

var myData = null;
    fs.readFile('C:\\Users\\jbt\\Desktop\\simplefile.txt', 'utf8', function (err,data) {
        if (err) {
            return console.log("the error is: " + err);
        }
        console.log(data);
        myData = data;
    });
    res.send(myData);

我在 SO 中尝试了其他一些帖子,但没有任何帮助..

【问题讨论】:

  • 这个问题开始被发布得太频繁了......总是相同的答案:Javascript是异步。昨天同样的问题,请看我的回答:stackoverflow.com/questions/30636547/…
  • @JeremyThille - 谢谢,但我不明白它对我有什么帮助......
  • 这只是完全相同的问题和相同的答案。您正在发送一个未填充的变量,因为该过程是异步。这两个问题中的代码几乎相同,除了在您的情况下它是 readFile 而不是 SQL 查询。
  • 除了异步问题之外,您并没有向我们展示您的所有代码,因为您展示的代码不会导致您遇到的错误。

标签: javascript node.js express


【解决方案1】:

您尝试发送响应两次,即。 res.send() 被调用了两次,这就是为什么一旦发送响应就无法重新发送它。

【讨论】:

  • 谢谢,但不确定我明白了,你能举个例子吗?
  • 请检查您在api调用中总共执行了多少次res.send?
【解决方案2】:

fs.ReadFile 是异步操作,您正在发送响应并并行读取文件。你应该这样做

    var myData = null;
    fs.readFile('C:\\Users\\jbt\\Desktop\\simplefile.txt', 'utf8', function (err,data) {
        if (err) {
            return console.log("the error is: " + err);
        }
        console.log(data);
        myData = data;
        res.send(myData);
    });

我建议您阅读有关 Node.js 和异步方法范例的更多信息。

【讨论】:

  • 谢谢,但我尝试移动 res.send(myData);像你一样在里面,我得到了同样的错误,还有其他想法吗?
【解决方案3】:

如果您遇到任何错误,请发布您的错误?。请检查以下答案。

var myData ;
    fs.readFile('C:\\Users\\jbt\\Desktop\\simplefile.txt', 'utf8', function (err,data) {
        if (err) {
            return console.log("the error is: " + err);
        }
        console.log(data);
        myData = data;
       res.end(myData);//If you are not using express
    });

我想它会对你有所帮助。

【讨论】:

    猜你喜欢
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多