用户findOne无法正常工作

时间:2018-07-09 05:18:33

标签: javascript node.js express mongoose passport.js

我有一条Express路线

const express = require('express')
const router = express.Router()
var User = require("../models/user.js");
var passport = require("passport");

//User register
router.post("/", function(req, res) {
  console.log("user login post request");
  console.log(req.body.emailAddress)
  User.findOne({ username: req.body.emailAddress}, function(err, user){
      if (err) {
        console.log('post error: ', err)
        }
      else if (user) {
        console.log("already exsist")
      }
      else {
        console.log("here new user")
        User.register(new user({username: req.body.emailAddress }), req.body.password, function(error, user){
          if (error) {
            console.log("error -> Post request from user");
            console.log(error);
          } else {
            passport.authenticate("local"),function(req, res){
              console.log(res)
              console.log(req)
            };
          }
        })
      }
  })
})

//User login
router.post('/login',
  passport.authenticate('local', { successRedirect: '/home',
                                   failureRedirect: '/login' }));

module.exports = router;

在我添加User.findOne之前,该应用程序运行良好,在User.findOne之前是两个成功记录日志的日志语​​句,但是之后没有日志语句在我的终端中记录任何基于我猜我的程序的日志。工作。

有人可以帮助我解决此错误吗?

[更新]我的../models/user.js是。

var mongoose = require("mongoose");
var passportLocalMongoose = require("passport-local-mongoose")
var passportLocal = require("passport-local");


var UserSchema = new mongoose.Schema({
  username: String,
  password: String
});

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

[更新]:这是相同的github存储库:到这里:github.com/irohitb/litifier-

2 个答案:

答案 0 :(得分:3)

您需要访问架构对象:

require("../models/user.js"); // register your schema

var User= require('mongoose').model('User'); // load your schema

通过聊天更新:
如果什么也没有发生,甚至没有错误,那么您就没有建立与数据库的连接。

Mongoose使您可以在建立数据库连接之前就将请求排队。由于没有连接,因此不会有任何响应。一段时间后应该会引发超时错误。

使用以下命令连接到数据库:

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/mydatabase');

答案 1 :(得分:0)

我觉得您的问题是此回调函数从不调用res.sendres.endnext()

router.post("/", function(req, res) {})

此函数尽管是匿名的(没有名称),但它是Express middleware的一部分。

每个中间件都必须调用res.sendres.end next(),否则中间件将挂起:

  

如果当前中间件函数没有结束请求-响应周期,则它必须调用next()将控制权传递给下一个中间件函数。否则,该请求将被挂起。