首页 > 解决方案 > 如何在 mongodb 中获取用户 id 并在 jwt 中使用它?

问题描述

TypeError:无法读取未定义的属性“_id”

collection.insertOne({username: username, password: password}).then((err, user) => {
    const payload = user._id
    jwt.sign(payload, 'aspect', (err, token) => {
        console.log(token)
    })
})

标签: javascriptnode.jsmongodbexpressjwt

解决方案


InsertOne有 3 个可能的签名:

insertOne(docs: Object, callback: MongoCallback<InsertOneWriteOpResult>): void;
insertOne(docs: Object, options?: CollectionInsertOneOptions): Promise<InsertOneWriteOpResult>;
insertOne(docs: Object, options: CollectionInsertOneOptions, callback: MongoCallback<InsertOneWriteOpResult>): void;

您正在使用 Promise 签名,因为您没有提供回调函数。

所以返回值是InsertOneWriteOpResult,看起来怎么样?

{
    insertedCount: number;
    ops: Array<any>;
    insertedId: ObjectID;
    connection: any;
    result: { ok: number; n: number };
}

这意味着您需要将代码更改为首先只有 1 个输入用于承诺解析,然后再使用insertedId而不是_id,如下所示:

collection.insertOne({username: username, password: password}).then((userInsertResult) => {
    const payload = userInsertResult.insertedId
    jwt.sign(payload, 'aspect', (err, token) => {
        console.log(token)
    })
})

推荐阅读