/ / Express nie wysyła nagłówków - node.js, express

Express nie wyśle ​​nagłówków - node.js, express

Zrobiłem to od zera i wciąż daje mi to błąd ...

Uruchomiłem

express test

następnie

cd test && npm install

Edytowałem app.js, dodając taką trasę:

app.get("/test",function(req,res) {
res.writeHead(200, {"Content-Type": "application/json"});
return res.send("{"a":3}");
});

Potem uruchomiłem węzeł

node app.js

A kiedy próbuję uzyskać dostęp http://server/test dostaję

Error: Can"t set headers after they are sent.

Używam Węzeł v4.2.1, Express 2.5.8, npm 3.4.0.

Dzieje się tak po prostu z Express, jeśli utworzę prosty serwer na Węźle, mogę użyć writeHead.

Odpowiedzi:

1 dla odpowiedzi № 1

Gdy res.writeHead(200, {"Content-Type": "application/json"});, wysyłasz wszystkie nagłówki odpowiedzi do klienta, więc nie możesz ponownie wysłać nagłówka.

Bo res.send jest funkcją obiektu odpowiedzi express, szukam kodu źródłowego tej funkcji wysyłania:

wprowadź opis obrazu tutaj

  • fragment jest tym, co tutaj wysyłasz: String („{„ a ”: 3}”)

  • this.set("Content-Type", setCharset(type, "utf-8")) tutaj express pomaga nam połączyć nasz typ zawartości z utf-8, więc serwer musi ponownie wysłać nagłówek

Dlatego pojawia się błąd.

Ps. Przepraszam za mój zły angielski i mam nadzieję, że rozumiesz, co próbuję wyjaśnić.


1 dla odpowiedzi nr 2

A co z używaniem res.setHeader

var express = require("express");
var app = express();

app.get("/", function (req, res) {
res.setHeader("Content-Type","application/json");
res.send("{}");
});

var server = app.listen(3000, function () {
var host = "localhost";
var port = server.address().port;

console.log("Example app listening at http://%s:%s", host, port);
});