web-dev-qa-db-fra.com

Comment puis-je envoyer un statut de réussite au navigateur à partir de nodejs / express?

J'ai écrit le morceau de code suivant sur mon serveur nodeJS/Expressjs:

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");
        }
    }); 
});

Cela me permet d’obtenir les données de formulaire soumises et de les écrire dans un fichier JSON.

Cela fonctionne parfaitement. Mais le client reste dans un état de publication et finit par expirer. Je dois donc envoyer au client une sorte d’état ou d’en-tête de réussite.

Comment dois-je faire cela?

Merci d'avance!

51
jansmolders86

Mise à jour Express 2015:

Utilisez ceci à la place:

res.sendStatus(200)

Cela a été déconseillé:

res.send(200)  
110
ac360

Je voulais juste ajouter que vous pouvez envoyer json via l’assistant res.json().

res.json({ok:true}); // status 200 is default
res.json(500, {error:"internal server error"}); // status 500

Mise à jour 2015:

res.json(status, obj) est déconseillé en faveur de res.status(status).json(obj)

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

Dans Express 4, vous devriez faire:

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

au lieu de la obsolète:

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

Jup, vous devez envoyer une réponse, le plus simple serait

res.send(200);

Dans le gestionnaire de rappel de writeFile.

Le 200 est un code d'état HTTP, vous pouvez donc le modifier en cas d'échec:

if (err) {
    res.send(500);
} else {
    res.send(200);
}
8
Samuel