简体   繁体   English

猫鼬的findOne函数返回null / undefined

[英]Mongoose findOne function returns null/undefined

I always get null / undefined when fetching data from the database in my /authenticate route. 当通过我的/authenticate路由从数据库中获取数据时,我总是得到null / undefined Connection is successful and the user exists in the database (checked with Robo 3T). 连接成功,并且用户存在于数据库中(已通过Robo 3T检查)。 Here is an excerpt of the code: 以下是代码摘录:

var express = require("express");
var app = express();
var router = express.Router();
var mongoose = require("mongoose");
var user = require("../models/user");
var bodyParser = require("body-parser");
app.use(bodyParser.json());

router.post('/authenticate', function(req, res) {    
   user.findOne({ name: req.body.name }).then(function(foundUser) {
       if (!foundUser) { return res.status(404).send("No user matching name"); }
       return res.status(200).json(foundUser);
   });
});

Here is the request I'm executing from Postman: 这是我从邮递员执行的请求:

在此处输入图片说明

Edited answer: 编辑答案:

For express to parse form data in addition to json you need to add a second body parser to your application: 为了快速解析除json之外的表单数据,您需要向应用程序添加第二个正文解析器:

var app = require('express');
var bodyParser = require('body-parser');

// Enable express to parse body data from raw application/json data
app.use(bodyParser.json());

// Enables express to parse body data from x-www-form-encoded data
app.use(bodyParser.urlencoded({ extended: false }));

req.body.name it may be null, so findOne() may return null req.body.name可能为null,因此findOne()可能返回null

var query = user.findOne({name: req.params.name});

its depends on your route calling method try to use req.params.name 它取决于您的路由调用方法,尝试使用req.params.name

try making a test in mongo shell on your server. 尝试在服务器上的mongo shell中进行测试。 Print db.user.find(); 打印db.user.find(); and check your user 并检查您的用户

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM