1
votes

Tentative d'envoi de la réponse POST avec Node Express, erreur Code d'état non valide

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.


0 commentaires

3 Réponses :


0
votes

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


0 commentaires

0
votes

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.


0 commentaires

0
votes

changez cette ligne de code

res.sendStatus(res.statusCode);

À

res.status(200).send({well: 'yes'} ,result)

Cela fonctionnera correctement ..


0 commentaires