【问题标题】:Express: Cannot set headers after they are sent to the clientExpress:发送到客户端后无法设置标头
【发布时间】:2020-11-14 06:08:47
【问题描述】:

我正在尝试学习 Web API。我正在编写一个简单的代码,该代码在单击按钮后从日志中的服务器获取数据,但我在服务器端不断收到错误消息,即“无法在将标头发送到客户端后设置标头”。

我的服务器端代码:

const express = require("express");
const cors = require("cors");
const bodyParser = require("body-parser");
const app = express();
projectData = [];

app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());
app.use(cors());
app.use(express.static("website"));

const port = 9013;
const server = app.listen(port, listening);

function listening  () {
    console.log("running localhost"+port);
}
let someData = {name:"name", num:"num"};
app.get ('/hello', function (req, res){
    res.send("Get request response");
    res.send(someData);
})

我的客户端代码是:

const generate = document.getElementById("generate");

generate.addEventListener("click", performAction);

function performAction (e) {
    getDemo();
}

const getDemo = async () => {
    const res = await fetch ("/hello");
    try {
    const data = await res.json();
    console.log(data);
    }
    catch (error) {
        console.log("erroor");
    }
}

感谢您的帮助。

【问题讨论】:

    标签: javascript node.js express http


    【解决方案1】:

    这个问题是非常基本的。这里:

    app.get ('/hello', function (req, res){
        res.send("Get request response");
        res.send(someData);
    })
    

    您无法发送第二个回复。您已将Get request response 发送回客户端。

    1 个请求 = 1 个来自服务器的响应。就这样。 删除 1 行:

    app.get ('/hello', function (req, res){
        res.send(someData);
    })
    

    奖励:只是一个提示,您应该将 fetch 放在 try / catch 块内,而不是放在外面。

    【讨论】:

    • 非常感谢。我真的很感激,也感谢你的提示。
    猜你喜欢
    • 2020-11-02
    • 2019-12-11
    • 2019-08-27
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多