You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:15:02