Неверные входы по запросу POST - PullRequest
1 голос
/ 10 января 2020

Я получаю неверную ошибку ввода при моем запросе POST на Postman. Я проверил свои атрибуты пользовательской модели, но не могу точно определить, какие входные данные называются недействительными. Вот моя модель, контроллер, маршрут. и приложение. js. Пожалуйста, взгляните.

Приложение

const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');

const usersRoutes = require('./routes/users-routes');
const postsRoutes = require('./routes/posts-routes');
const HttpError = require('./models/http-error');
const app = express();

app.use(bodyParser.json());

app.use('/api/users', usersRoutes);
app.use('/api/posts', postsRoutes);

app.use((req, res, next) => {
    const error = new HttpError('Could not find this route.', 404);
    throw error;
})

app.use((error, req, res, next) => {
  if (res.headerSent) {
    return next(error);
  }
  res.status(error.code || 500)
  res.json({ message: error.message || 'An unknown error occurred!' });
});

const connectUrl = 'hidden';

const connectConfig = {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  useCreateIndex: true
}

mongoose
    .connect(connectUrl, connectConfig)
    .then(() => {
        app.listen(5000);
    })
    .catch(err => {
        console.log(err);
    });

Модель пользователя

const userSchema = new Schema({
  username: { type: String, required: true },
  email: { type: String, required: true, unique: true },
  password: { type: String, required: true },
  avatarUrl: { type: String, required: true },
  posts: [{ type: mongoose.Types.ObjectId, required: true, ref: 'Post' }]
});

Пользовательский контроллер

const signup = async (req, res, next) => {
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return next(
      new HttpError('Invalid inputs passed, please check your data.', 422)
    );
  }
  const { username, email, password } = req.body;


  let existingUser
  try {
    existingUser = await User.findOne({ email: email })
  } catch (err) {
    const error = new HttpError('Signing up failed, please try again later.', 500);
    return next(error);
  }

  if (existingUser) {
    const error = new HttpError('User exists already, please login instead.', 422);
    return next(error);
  }

  const createdUser = new User({
    username,
    email,
    password,
    avatarUrl: 'https://images.pexels.com/photos/406014/pexels-photo-406014.jpeg?auto=compress&cs=tinysrgb&dpr=3&h=750&w=1260',
    posts: []
  });

  try {
    await createdUser.save();
  } catch (err) {
    const error = new HttpError('Signup failed, please try again.', 500);
    return next(error);
  }

  res.status(201).json({ user: createdUser.toObject({ getters: true })});
}

Пользовательские маршруты

router.post(
  '/signup',
  [
    check('username').not().isEmpty(),
    check('email').normalizeEmail().isEmail(),
    check('password').isLength({ min: 6 })
  ],
  usersController.signup
);

Почтальон

enter image description here

Ответы [ 2 ]

0 голосов
/ 10 января 2020

Спасибо @SuleymanSah за ответ (извините, я не знаю, как пометить ваш комментарий выше как ответ)

Проблема заключалась в том, что флажок Заголовки для Content-Type: application/json на Почтальоне не был отмечен. Установка флажка решает проблему неверных входов.

0 голосов
/ 10 января 2020

Убедитесь, что вы используете body parser в своем промежуточном программном обеспечении:

app.use(express.json())
app.use(express.urlencoded({ extended: true }))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...