Вставьте в mongodb заморозку без ошибок - PullRequest
0 голосов
/ 14 января 2020

Это мое соединение с базой данных:

app. js

const express = require("express");
const app = express();
var { MongoClient } = require("mongodb");
MongoClient.connect("mongodb://localhost:27017", (err, client) => {
  if (err) return console.log(err);
  db = client.db("MyDb");
  app.listen(5000, () => {
    console.log("listening on 5000");
  });
});

И это моя insert функция:

router.post(
  "/register",
  [
    check("email")
      .notEmpty()
      .withMessage("Email Field is empty"),
    check("email")
      .isEmail()
      .withMessage("Your email is not valid")
  ],
  function(req, res) {
    const errors = validationResult(req);
    if (errors.length >= 0) {
      res.render("register", { errors: errors.errors });
      console.log(errors.errors);
      return;
    }

    const { name, email, password } = req.body;

    const newUser = new User({
      name: name,
      email: email,
      password: password
    });

    newUser.save(function(err) {
      if (err) throw err;

      console.log(true);
    });
  }
);

А это моя модель пользователя:

Пользователь. js

const mongoose = require("mongoose");

const UserSchema = mongoose.Schema({
  name: { type: String, require: true },
  email: { type: String, require: true, unique: true },
  password: { type: String, require: true },
  created_at: Date,
  updated_at: Date
});

const User = mongoose.model("User", UserSchema);

module.exports = User;

В терминале или браузере нет ошибок. Когда я нажимаю кнопку «зарегистрироваться», приложение зависает, и сообщения об ошибке вообще нет.

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

Ответы [ 2 ]

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

Я считаю, что в предлагаемом коде есть два порядка проблем, по крайней мере, как мы можем прочитать в вашем вопросе:

  1. Во-первых, я не могу найти никакой связи между mon goose и установленное соединение mongodb
  2. Во-вторых, ваш обработчик маршрута, похоже, не возвращает код состояния / контент вызывающей стороне

Итак, как я вижу это, вы можете

  1. изменить настройку соединения следующим образом
mongoose.connect('mongodb://localhost/test', {useNewUrlParser: true})
    .then((conn, err) => {
    app.listen(5000, () => {
        console.log("listening on 5000");
    });
});

, чтобы связать mon goose с конфигурацией MongoDb

повторите код состояния, например, 201, когда новый User был сохранен:
newUser.save(function(err) {
    console.log('Result', err)
    if (err) throw err;

    console.log(true);
    res.send(201)
});

Таким образом я предотвращаю зависание приложения при получении запроса ...

Надеюсь, это поможет вам!

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

validationResult() "Извлекает ошибки проверки из запроса и делает их доступными в объекте Result." https://express-validator.github.io/docs/validation-result-api.html Поэтому, если у вас нет ошибок, этот объект не будет содержать ошибок (вы можете проверить с помощью .isEmpty()), ваша конечная точка не отправляет ответ и оставляет запросчик в ожидании.

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