Je rencontre un problème avec mon application native réagissant à mon API Node. Lorsque j'essaie de publier des données pour mettre à jour certaines valeurs dans la base de données via un noeud (qui passe ensuite à une procédure stockée), j'obtiens un 500 - Impossible de définir les en-têtes après leur envoi dans Noeud. Tout ce que je peux trouver dit que cela pourrait être dû à l'envoi de réponses deux fois. Je ne pense pas que ce soit le cas ici. J'ai testé dans le facteur et les choses fonctionnent bien, il renvoie un statut de 200 avec les bonnes données renvoyées.React Native/Node API: Impossible de définir les en-têtes après leur envoi
Je suis en train de publier des données sur l'API comme ceci:
const myHeaders = new Headers();
myHeaders.append('Content-Type', 'application/json');
fetch(`http://localhost:3000/user/preferences`, {
method: 'POST',
headers: myHeaders,
mode: 'cors',
cache: 'default',
body: JSON.stringify({
id: '1',
minage: this.state.minageValue,
maxage: this.state.maxageValue
})
})
.then(response => response.json())
.then(body => console.log(body))
.catch(err => console.log(err));
Je reçois sur le côté de l'API et de transmettre les données à une procédure stockée avec ceci:
function updatePreferences(req, res, next) {
console.log(req);
var userid = req.body[0].id;
var minage = req.body[0].minage;
var maxage = req.body[0].maxage;
db.func('___spsavepreferences', [userid, minage, maxage])
.then(function(data){
res.status(200)
.json({
status: 'success',
preferences: data
});
});
}
Tous des idées?
EDIT:
Je ne sais pas si cela me dit quelque chose, mais je suis connecté le message d'erreur à la console:
Error: Can't set headers after they are sent.
at validateHeader (_http_outgoing.js:504:11)
at ServerResponse.setHeader (_http_outgoing.js:511:3)
at ServerResponse.header (/Users/user/Projects/Project_node/node_modules/express/lib/response.js:730:10)
POST /user/preferences 500 410.809 ms - 189
at ServerResponse.send (/Users/user/Projects/Project_node/node_modules/express/lib/response.js:170:12)
at done (/Users/user/Projects/Project_node/node_modules/express/lib/response.js:967:10)
at Object.exports.renderFile (/Users/user/Projects/Project_node/node_modules/jade/lib/index.js:374:12)
at View.exports.__express [as engine] (/Users/user/Projects/Project_node/node_modules/jade/lib/index.js:417:11)
at View.render (/Users/user/Projects/Project_node/node_modules/express/lib/view.js:128:8)
at tryRender (/Users/user/Projects/Project_node/node_modules/express/lib/application.js:640:10)
at Function.render (/Users/user/Projects/Project_node/node_modules/express/lib/application.js:592:3)
at ServerResponse.render (/Users/user/Projects/Project_node/node_modules/express/lib/response.js:971:7)
at /Users/user/Projects/Project_node/app.js:51:7
at Layer.handle_error (/Users/user/Projects/Project_node/node_modules/express/lib/router/layer.js:71:5)
at trim_prefix (/Users/user/Projects/Project_node/node_modules/express/lib/router/index.js:315:13)
at /Users/user/Projects/Project_node/node_modules/express/lib/router/index.js:284:7
at Function.process_params (/Users/user/Projects/Project_node/node_modules/express/lib/router/index.js:335:12)
EDIT 2: Got it. J'avais besoin de recevoir les valeurs comme req.body.id, req.body.minage, etc ... pas comme req.body [0] .id. Bizarre d'avoir une erreur comme ça mais qui a résolu l'erreur.
Salut sideshow, merci pour la réponse. Je pourrais me tromper complètement, mais cela ne semble pas être le problème. J'ai envoyé la requête d'options via curl et j'ai reçu une réponse de 200 - ce qui semblerait indiquer que tout va bien ... J'ai aussi plusieurs autres points de terminaison API (qui ressemblent à peu près au même, noms et paramètres de procédure stockée) ça fonctionne bien. J'ai mis à jour mon message avec le message d'erreur. Le reste de l'application est à peu près une installation de nœud standard - je n'ai pas beaucoup changé. – nab1994
OK, je ne sais pas combien la réponse a réellement aidé, mais je vous vois de votre mise à jour à la question que vous avez réussi à trouver la cause et à la réparer, donc je suis content de vous entendre trouver la solution :) – sideshowbarker