Как исправить ошибку «xyz.push (a) не является функцией» в JS - PullRequest
0 голосов
/ 07 мая 2019

Я новичок в мире RESTful API.Итак, я учусь работать с ним без использования базы данных.В качестве упражнения я хочу построить 2 конечные точки

  • POST auth / signup
  • POST auth / signin Когда я пытаюсь проверить свою конечную точку регистрации с почтальоном, я получаю некоторые ошибкии неожиданное поведение.Структура моих файлов такова: data / users :

    let users = [

    {id: 1, электронная почта: 'user@gmail.com',имя: 'You', пароль: 'Pat123'}

    ];

module.export = users;

route / signUp.routes.js :

const express = require('express');

const router = express.Router();

const usr = require('../data/users');
//import usr from '../data/users'; // not yet supported (nativelly)

//const m = require('../helpers/middlewares');

/* Create a new user */
router.post('/', (req, res) => {

if(!req.body.email) {
    return res.status(404).send({
    status: 404,
    message: 'email is required',
    });
} else if(!req.body.name) {
    return res.status(404).send({
    status: 404,
    message: 'name is required'
    });
  }
const userNew = {
    id: usr.length + 1,
    email: req.body.email,
    name: req.body.name,
    password: 'user123',
};
usr.push(userNew);
return res.status(200).send({
    status: 200,
    message: 'New user added successfully',
    userNew,
    });
});

// Routes
module.exports = router;

У меня также есть файл конфигурации в корневом каталоге для запуска сервера через порт 3000.

Если я запускаю код выше на Почтальоне, я получаю толькорезультат первого оператора if, хотя все в порядке, чтобы пройти этот тест.Я не понимаю, почему.Если я комментирую этот блок (если и если еще), я получаю сообщение об ошибке, в котором говорится, что usr.push () не является функцией.Я провел несколько часов, пытаясь решить, но тщетно.Что-то не так с моим кодом?

Редактировать

Я изменил свою файловую структуру, я не получаю usr.push () больше не является ошибкой функции.Но блок, если еще, если все еще не работает хорошо.На запрос отвечает только первый блок, хотя я отправляю все необходимые поля или отправляю одно из них.

1 Ответ

0 голосов
/ 07 мая 2019

По умолчанию req.body равно undefined и заполняется при использовании промежуточного программного обеспечения для анализа тела, такого как body-parser и multer. Ссылка

Установите body-parser, введя команду npm install --save body-parser

Тогда в вашем коде

var bodyParser = require('body-parser');
app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded

Теперь вы должны иметь доступ к телу запроса. Не забудьте установить заголовок запроса content-type как application/json

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...