mongoose TypeError:无法读取nodejs中null(阅读“_id”)的属性

uyhoqukh  于 11个月前  发布在  Go
关注(0)|答案(1)|浏览(128)

当我学习新东西时,我通常会编写代码,在其中我可以使用它,但我会尽可能简单地编写代码。现在我正在学习JsonWebToken的基础知识,所以我在MongoDB中创建了一个非常小的数据库-只有几个文档,有3个字段- _id,name,age和username。然后我在node.js中编写了几行代码,但问题是,我总是收到“TypeError:Cannot read properties of null(阅读'_id')"。如果我将有效负载留空(通过删除'doc._id')然后我得到一个带有安全令牌的响应,但是其中的data属性为null -“data”:{“user”:null}。你能告诉问题出在哪里吗?下面是代码,只有最后几行missig('mongoose.connect.' etc.)

const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const jwt = require('jsonwebtoken');

const app = express();

app.use(bodyParser.json());

const userSchema = new mongoose.Schema({
    name: { type: String, required: true },
    age: { type: Number, required: true },
    username: { type: String, required: true }, 
});

const User = mongoose.model('User', userSchema);

function login(req, res){ 
User.findOne({  username })
    .then(function(doc){ 
        const token = jwt.sign({ doc._id }, 'abc123', {expiresIn: 250});
        return res.status(200).json({status: 'success', token, data: {doc}}); 
    });                     
}

app.post('/login', login);

字符串
有没有人知道如何在响应中获取用户的实际数据?

3z6pesqy

3z6pesqy1#

如果你通过Postman发送一个payload,那么你需要在User.findOne函数中访问req.body对象,如下所示:

User.findOne({ username: req.body.username })
//...
//...

字符串
此时,"TypeError: Cannot read properties of null (reading '_id')" .是因为试图读取doc._id。它为空,因为没有{username: undefined}的匹配项。

相关问题