Next.js中getServerSideProps内await不生效无返回数据怎么解决
问题根因
执行顺序异常、返回值为空的核心原因是 handler 函数混用了Mongoose回调语法与async/await异步逻辑:
Mongoose的.exec()方法如果传入回调函数,返回值就不是Promise对象,此时外层await handler()无法等待回调执行完成,会直接拿到未完成的查询对象继续向下执行,因此会先打印getData getData日志,等数据库查询回调触发后才会打印datadatadatadata相关日志,自然也拿不到回调里的返回值。
修复方案
把handler函数里的回调写法替换为Promise + try/catch的写法,让.exec()返回Promise对象供外层await等待:
import User from '../../../models/UserModel'; import Files from '../../../models/FileModel'; import dbConnec from '../../../utils/dbConnect'; const jwt = require('jsonwebtoken'); export async function handler(authorization) { // 建议把数据库连接移到函数内部,避免冷启动/多次导入时的连接异常 await dbConnec(); const token = authorization; const decoded = jwt.verify(token, "MySuperSecret"); // 后续建议把密钥存到环境变量中,不要硬编码 const id = decoded.userId; try { const filesUser = await Files.find({user : id }).exec(); console.log('datadatadatadata' , filesUser); return filesUser; } catch (err) { console.log('datadatadatadata2222222222222'); return []; } };
修改后.exec()没有传入回调,会返回标准Promise对象,外层await会等待数据库查询完成才会继续执行后续代码,执行顺序会恢复正常,也能正确拿到查询到的files数据。
内容的提问来源于stack exchange,提问作者zahra
相关产品推荐
相关产品推荐

