在解构(或尝试访问)mongoose查询对象时变得未定义

vshtjzan  于 2023-05-29  发布在  Go
关注(0)|答案(1)|浏览(119)

我使用Next.js内置API作为身份验证API。
我在pages/API/auth中有一个名为login.js的文件,这是我生成JWT的API。
我需要在我的登录表单上获取用户输入,并使用Mongoose在我的MongoDB中检查那些具有凭据的用户。
我试图解构从DB返回的查询对象以进行比较,但我得到的是未定义的。
下面是我在API中代码:

export default async function login(req, res) {
    res.setHeader('Access-Control-Allow-Origin', 'http://localhost:3006')
    res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Accept')
    res.setHeader('Access-Control-Allow-Methods', 'OPTIONS')

    await mongoose.connect('mongodb://127.0.0.1:27017/dashboard-db')
    const { username, password } = await req.body
    const query = await User.findOne({ usernameDB: username }, { usernameDB: 1, passwordDB: 1, _id: 0 })
    const { usernameDB, passwordDB } = query

    return new Promise((resolve, reject) => {
        console.log("Response: ", query)
        res.status(200).send({ message: "Hello World!" })
        resolve();
    })

但在控制台中我得到了TypeError: Cannot destructure property 'usernameDB' of 'query' as it is null.
我试过:
query.usernameDB
query["usernameDB"]
使用User.find()
当我尝试console.log("Query: ", query)时,我得到了

Query: null

Response: null

Query: { usernameDB: 'sco', passwordDB: '3168' }

Response: { usernameDB: 'sco', passwordDB: '3168' }
oyjwcjzk

oyjwcjzk1#

这只是我的API从next.js端口3000试图响应我的React应用程序端口3006导致强制我的应用程序发送一个preflight请求与OPTIONS方法(一个额外的请求,我的应用程序的工作)。
然后它导致了问题,因为第一个请求是使用OPTIONS方法的印前请求,没有主体。
(my一个朋友告诉我,当我使用react和next.js时,在主应用程序的一个独立端口上设置API是不合理的,但我这样做是出于测试目的,并不认为这会导致实际上的bug;))

相关问题