最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

User.findOne()函数没有从调用返回到数据库

IT培训 admin 4浏览 0评论

User.findOne()函数没有从调用返回到数据库

我正在编写节点应用程序的注册用户功能。我打电话来连接到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);

我的mogoClient:

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
};

server.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"));
});
回答如下:

据我所知,您的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客户端与其余代码连接的位置,例如猫鼬计划。

User.findOne()函数没有从调用返回到数据库

我正在编写节点应用程序的注册用户功能。我打电话来连接到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);

我的mogoClient:

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
};

server.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"));
});
回答如下:

据我所知,您的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客户端与其余代码连接的位置,例如猫鼬计划。

发布评论

评论列表 (0)

  1. 暂无评论