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