req.body пуст на POST с данными, однако регистрация req показывает, что req.body существует - PullRequest
1 голос
/ 12 марта 2020

Моя проблема

Я пытаюсь написать страницу регистрации / входа в систему node.js, используя express. js. Я решил разделить маршруты и инициализацию приложения на два файла. Когда я отправляю запрос POST на localhost:3000/register с данными {"username":"xyz","password":"xyz"}, объект запроса имеет тело атрибута. Однако, когда я пытаюсь получить доступ к этому атрибуту, я получаю неопределенное значение.

Мой текущий код

// app.js
// Load express and define port
const express = require('express');
const app = express();
const port = 3000;
// App Configurations
app.use(express.json())
// Load Routes
var registerRouter = require('./controllers/register.js');
// Use Routes
app.use('/register', registerRouter);
// Start App
app.listen(port, () => console.log(`Example app listening on port ${port}!`));
// controllers/register.js
// requires
var argon2i = require('argon2-ffi').argon2i;
var bodyParser = require('body-parser');
var {Database, Model} = require('mongorito');
var crypto = require('crypto')
var Promise = require('bluebird');
var randomBytes = Promise.promisify(crypto.randomBytes);
var express = require('express');
// define router
var router = express.Router();
// Mongo Connection
const db = new Database('localhost/test', { 
    reconnectTries: 5 
});
// Models
class User extends Model {}
// Register Models
db.register(User);
// Routes
router.post('/', async (res, req) => {
    console.log(req.body);
    if(!req.body) return req.sendStatus(400); 
    const username = req.body.username;
    const salt = randomBytes(32); 
    const password = argon2i.hash(req.body.password, salt);
    var user = new User({
        username: username,
        password: password,
        salt: salt
    });
    await user.save;
    res.send("User Created");
});
// Disconnect From Database
db.disconnect;
//export router
module.exports = router;

Мой ожидаемый результат

Я ожидаю, что смогу получить доступ req.body и req.body.username.

Ответы [ 2 ]

1 голос
/ 12 марта 2020

У вас есть небольшая проблема в вашем коде. Первый параметр router.post функции обратного вызова - req, а второй - res. Параметры Callback function имеют фиксированные неназванные параметры.

Вы пытаетесь получить тело для response object, хотя имя параметра req, но оно все еще содержит response object. который вызывает проблему.

Пожалуйста, измените его.

Неправильно:

router.post('/', async (res, req) => {

Правильно:

router.post('/', async (req, res) => {
0 голосов
/ 12 марта 2020

Я вижу, вы импортируете bodyParser в контроллер / регистр, но не устанавливаете его, по крайней мере, в этом фрагменте. если у вас нет особых причин для его установки в контроллер, сделайте это вместо этого.

// app.js
// Load express and define port
const express = require('express');
const bodyParser = require('body-parser'); // new code

const app = express();
app.use(bodyParser.urlencoded({ extended: true })); // new code
const port = 3000;
// App Configurations
app.use(express.json())
// Load Routes
var registerRouter = require('./controllers/register.js');
// Use Routes
app.use('/register', registerRouter);
// Start App
app.listen(port, () => console.log(`Example app listening on port ${port}!`));
...