Après avoir terminé l'enregistrement, obtention de l'erreur suivante en essayant de répondre à la demande POST. (l'utilisateur a bien été ajouté à la base de données)
// Registrator // Requires request and response const validator = require('./validator') const bcrypt = require('bcrypt') exports.register = function(req, res) { const valErr = validator.registrationValidator(req) if (valErr) { console.log(`Validation Error: ${JSON.stringify(valErr)}`) res.status(200).send([{well: 'no'} ,valErr]) throw valErr } const db = require('../modules/database') const username = req.body.username const fname = req.body.fname const lname = req.body.lname const email = req.body.email const password = req.body.password // Hash Password bcrypt.hash(password, 10, (err, hash) => { if (err) throw err db.query('INSERT INTO users (username, email, password_hash, first_name, last_name) VALUES (?, ?, ?, ?, ?)', [username, email, hash, fname, lname], (err, result) => { if (err) { res.send(err) throw err } res.status(200).send({well: 'yes'} ,result) }) }) return 0 }
index.js (inpoints)
// Middlewares const express = require('express') const morgan = require('morgan') const cors = require('cors') const bodyParser = require('body-parser') const validator = require('express-validator') const registrator = require('./auth/registrator') const status = require('./appstatus/status') require('dotenv').config(); // New express app const app = express() app.use(morgan('tiny')) app.use(cors()) app.use(bodyParser.json()) app.use(validator()) // Status GET app.get('/status', status.getStatus) // Register POST app.post('/auth/reg', registrator.register) // Express.js listen const port = process.env.PORT || 3362 app.listen(port, () => { console.log(`On port ${port}`) })
registrator.js
express deprecated res.send(status, body): Use res.status(status).send(body) instead auth\registrator.js:31:29 D:\startloop\server\node_modules\mysql\lib\protocol\Parser.js:80 throw err; // Rethrow non-MySQL errors ^ RangeError: Invalid status code: [object Object] at ServerResponse.writeHead (_http_server.js:199:11) at ServerResponse.writeHead (D:\startloop\server\node_modules\on-headers\index.js:55:19) at ServerResponse._implicitHeader (_http_server.js:190:8) at write_ (_http_outgoing.js:632:9) at ServerResponse.end (_http_outgoing.js:751:5) at ServerResponse.send (D:\startloop\server\node_modules\express\lib\response.js:221:10) at ServerResponse.json (D:\startloop\server\node_modules\express\lib\response.js:267:15) at ServerResponse.send (D:\startloop\server\node_modules\express\lib\response.js:158:21) at Query.db.query (D:\startloop\server\auth\registrator.js:31:29) at Query.<anonymous> (D:\startloop\server\node_modules\mysql\lib\Connection.js:502:10)
Cela semble être un problème avec MySQL. Essayer d'envoyer valErr fonctionne mais pas envoyer une réponse d'enregistrement. Remarque: la requête a été effectuée avec succès.
3 Réponses :
Bienvenue, tant pis les gars. Après l'avoir soigneusement inspecté, j'ai oublié de mettre les données de la réponse dans un tableau comme celui-ci
res.status(200).send([{well: 'yes'}, result])
Damit
Notez la première ligne de votre erreur
express obsolète res.send (status, body): Utilisez res.status (status) .send (body)
Votre problème est ici
res.status(500).send(err);
Comme l'indique votre erreur, res.send (status, body)
est obsolète, mais vous fais:
res.send (err)
Il interprète err
comme un code d'état (ce n'est pas le cas);
Remplacez ceci par
db.query('INSERT INTO users (username, email, password_hash, first_name, last_name) VALUES (?, ?, ?, ?, ?)', [username, email, hash, fname, lname], (err, result) => { if (err) { res.send(err) throw err } res.status(200).send({well: 'yes'} ,result) })
Pour une erreur plus significative.
changez cette ligne de code
res.sendStatus(res.statusCode);
À
res.status(200).send({well: 'yes'} ,result)
Cela fonctionnera correctement ..