Mongoose.js Ошибка проверки модели в конечной точке приложения Express.js - PullRequest
0 голосов
/ 08 сентября 2018

У меня проблема с тестированием вождения конечной точки для API, который я создаю. Конечная точка для человека, чтобы зарегистрироваться как новый пользователь / пользователи / регистрация. Когда я попал в маршрут со следующим телом запроса { "имя": "джон", "электронная почта": "john@example.com" "пароль": "Password1234!" }

Я получаю 404, потому что возникает ошибка проверки из пользовательской схемы. В сообщении об ошибке указывается, что требуется пароль passwordHash. Моя схема настроена таким образом, что у меня есть поле виртуального пароля, и я хэширую это поле и сохраняю его в поле passwordHash, которое является обязательным. Это счастливый путь и не должен быть неудачным. Модульные тесты моей модели / схемы и тесты контроллера, которые охватывают эту функциональность, проходят. Однако, когда я тестирую маршрут, он терпит неудачу. Соответствующие файлы вставлены ниже. Если вы хотите посмотреть приложение и запустить его здесь, вы можете сделать репозиторий https://github.com/Euklidian-Space/voter-node/tree/user_routes. После запуска npm install запустите npm start, чтобы запустить сервер. Вам также понадобится mongodb.

Вот определение маршрута

const router = require("express").Router();
const UserController = require("../controllers/user_controller");

router.get("/:id", UserController.verifyToken, UserController.show);
router.post("/register", UserController.create);

module.exports = router;

Вот действие create в пользовательском контроллере

exports.create = async (req, res, next) => {
  const [err, user] = await to(createUser(req.body)); 
  if (err) return next(err);

  const respObj = {
    user,
    token: token(user.id, JWT_KEY, jwt)
  };

  res.status(200).send(respObj);
  return Promise.resolve(respObj);
};

Вот схема пользователя

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const bcrypt = require('bcryptjs');
const { validatePassword } = require("./validations");

const userSchema = new Schema({
  name: {type: String, required: true},
  email: {type: String, required: true},
  passwordHash: {type: String, required: true},
  polls: [{type: Schema.Types.ObjectId, ref: "Poll"}]
});

userSchema.virtual("password")
  .get(function() { return this._password; })
  .set(function(val) {
    this._password = val;
    validatePassword(val)
      .then(pw => {
        const salt = bcrypt.genSaltSync(10);
        const hash = bcrypt.hashSync(pw, salt);
        this.passwordHash = hash;
      }).catch(err => this.invalidate("passwordHash", err));
  });

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