【问题标题】:User findOne not working用户 findOne 不工作
【发布时间】:2018-12-16 17:28:34
【问题描述】:

我有以下特快路线

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-

【问题讨论】:

  • 也发布您的../models/user.js
  • 你能分享你的models/user.js吗?
  • @DushyantBangal 立即查看
  • @SonaliRupela 完成 :)
  • 您可以尝试将护照插件删除到猫鼬吗?

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


【解决方案1】:

您需要访问架构对象:

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');

【讨论】:

  • 这会引发错误 User.findOne is not a function
  • 抱歉,在您发表此声明之前,还需要模型文件。
  • 我的架构在这里应该等于什么? var User = require("../models/user.js") var User= require('mongoose').model('User').schema 即使这是抛出相同的错误(TUser.findOne 不是函数)
  • 如果我什么都不放,那么这条线将如何工作.model('User').schema?另外,按你说的方法试了,同样的错误User.findOne is not a function
  • @KuchBhi,我已经更新了我的代码。删除了.schema。这应该有效。
【解决方案2】:

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

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

这个函数,虽然它是匿名的(没有名字),但它是 Express middleware 的一部分。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-06
    • 2021-02-27
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 2023-03-23
    相关资源
    最近更新 更多