0

ノード アプリケーションの登録ユーザー関数を作成しています。mongodb データベースに接続するための呼び出しを行います。ただし、User.findOne({ email: req.body.email })関数を使用してデータベースを検索すると、関数がそのステップでスタックします。Postmate を使用してリクエストを送信しconsole.log()、リクエストの本文を送信することができます

ユーザールート:

router.post("/register", async (req, res) => {
  console.log("in here");
  user = await User.findOne({ email: req.body.email }) 
    .then(user => {
      console.log("in here");
      if (user) {
        console.log("2");
        return res.status(400).json({ email: "Email address already exists" });
      } else {
        const newUser = new User({
          first: req.body.first,
          last: req.body.last,
          email: req.body.email,
          password: req.body.password
        });

私のユーザーモデル:


const UserSchema = new mongoose.Schema({
  name: {
    type: String,
    trim: true
  },
  first: {
    type: String,
    trim: true,
    required: "First Name Required"
  },
  last: {
    type: String,
    trim: true,
    required: "Last Name Required"
  },
  email: {
    type: String,
    unique: true,
    lowercase: true,
    trim: true
  },
  password: {
    type: String,
    required: true
  },
  date: {
    type: Date,
    default: Date.now
  }
});

module.exports = User = mongoose.model("User", UserSchema);

私のモゴクライアント:

const MongoClient = require("mongodb").MongoClient;

const databaseUri = require("../config/keys").mongoURI;

const connect = () => {
  return new Promise((resolve, reject) => {
    MongoClient.connect(
      databaseUri,
      { useNewUrlParser: true },
      (err, client) => {
        if (err) {
          reject("Unable to connect to MongoDB server");
          console.log(err);
        }
        client.close();
      }
    );
  });
};

module.exports = {
  connect
};

サーバー.js

const express = require("express");
const http = require("http");

const mongoClient = require("./database/mongoClient");
const routes = require("./routes");

const app = express();
app.set("port", process.env.PORT || 3000);
app.get("/", (req, res) => res.send("Hello World 3"));

//connect to database
mongoClient.connect();

//initialize routes
routes.init(app);

http.createServer(app).listen(app.get("port"), function() {
  console.log("Express server listening on port " + app.get("port"));
});
4

1 に答える 1

0

私が知る限り、あなたの Mongo クライアントのセットアップは正しくありません。Promise を使用しますが、

  • あなたは電話しないでくださいresolve(あなたはそれを閉じるだけですか?!!!!???)、
  • サーバーで Promise が完了するのを待ちません。
return new Promise((resolve, reject) => {
    MongoClient.connect(
        databaseUri,
        { useNewUrlParser: true },
        (err, client) => {
            if (err) {
                reject("Unable to connect to MongoDB server");
                console.log(err);
            }
            resolve(client);
        });
});

//initialize routes
routes.init(app);

//connect to database
mongoClient
    .connect()
    .then(() => {
        http
            .createServer(app)
            .listen(app.get("port"), function() {
                console.log("Express server listening on port " + app.get("port"));
            });
    });

また、Mongo クライアントを残りのコード (Mongoose スキームなど) に接続する場所もわかりません。

于 2019-02-18T20:25:09.487 に答える