首页 > 解决方案 > Express:发送到客户端后无法设置标头

问题描述

我正在尝试学习 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");
    }
}

感谢您的帮助。

标签: javascriptnode.jsexpresshttp

解决方案


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

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 块放在里面而不是外面。


推荐阅读