Wie kann ich einen Erfolgsstatus von nodejs / express an den Browser senden?

73

Ich habe den folgenden Code in meinen nodeJS / Expressjs-Server geschrieben:

app.post('/settings', function(req, res){
    var myData = {
        a: req.param('a')
        ,b: req.param('b')
        ,c: req.param('c')
        ,d: req.param('d')
    }

    var outputFilename = 'config.json';

    fs.writeFile(outputFilename, JSON.stringify(myData, null, 4), function(err) {
        if(err) {
          console.log(err);
        } else {
          console.log("Config file as been overwriten");
        }
    }); 
});

Auf diese Weise kann ich die übermittelten Formulardaten abrufen und in eine JSON-Datei schreiben.

Das funktioniert perfekt. Der Kunde bleibt jedoch in einer Art Posting-Status und tritt schließlich eine Zeitüberschreitung auf. Ich muss also eine Art Erfolgsstatus oder Erfolgskopf an den Client zurücksenden.

Wie soll ich das machen?

Danke im Voraus!

jansmolders86
quelle

Antworten:

144

Express Update 2015:

Verwenden Sie stattdessen Folgendes:

res.sendStatus(200)

Dies ist veraltet:

res.send(200)  
ac360
quelle
Ich
bekomme
1
Sind Sie sicher, dass Sie Express installiert haben und es sich um Express v4 handelt?
ac360
1
Ja! Fügen Sie den Antworten das Datum hinzu. So viele veraltete Antworten da draußen. Besonders für schnell wechselnde Stapel. Wir sollten mindestens ein paar Monate gut sein :)
Adam Mendoza
1
Der sendStatus scheint nicht für mich zu funktionieren (Version 4.0.0)
mitomed
.sendStatus () ist unter expressjs.com/de/4x/api.html#res.sendStatus dokumentiert . Ich habe den Link auch zur Antwort hinzugefügt.
Mikemaccana
29

Ich wollte nur hinzufügen, dass Sie json über den res.json()Helfer senden können .

res.json({ok:true}); // status 200 is default

res.json(500, {error:"internal server error"}); // status 500

Update 2015:

res.json(status, obj) wurde zugunsten von abgelehnt res.status(status).json(obj)

res.status(500).json({error: "Internal server error"});
Aron Woost
quelle
12

In Express 4 sollten Sie Folgendes tun:

res.status(200).json({status:"ok"})

anstelle der veralteten:

res.json(200,{status:"ok"})
user2468170
quelle
10

Jup, du musst eine Antwort zurückschicken, die einfachste wäre

res.send(200);

Im Callback-Handler von writeFile.

Der 200 ist ein HTTP-Statuscode, sodass Sie diesen im Fehlerfall sogar ändern können:

if (err) {
    res.send(500);
} else {
    res.send(200);
}
Samuel
quelle
yup genau das fehlt!
tUrG0n
Lief wie am Schnürchen. Vielen Dank!
jansmolders86