API 已解决但未发送对 /api/repositories 的响应,这可能会导致请求停滞

API resolved without sending a response for /api/repositories, this may result in stalled requests

我使用 NextJS API 接口作为服务器发送事件如下:

const handler = async (req: NextApiRequest, res: NextApiResponse) => {

    ...
    ...

    res.setHeader("Content-Type", "text/event-stream;charset=utf-8");
    res.setHeader("Cache-Control", "no-cache, no-transform");
    res.setHeader("Connection", "keep-alive");

    const observer: Observer<RepoInformation> = {
        next: value => {
            res.write(`event: received\n`);
            res.write(`data: ${JSON.stringify(value)}\n\n`);
        },
        error: (err: Error) => {
            res.write(`event: data-error\n`);
            res.write(`data: ${err.message}\n\n`);
        },
        complete: () => {
            console.log("Do nothing!!!");
        },
    };

    await
        access$.pipe(mergeMap(svc.repo.listRepos$))
        .subscribe(observer);
};

export default withApiAuthRequired(handler);

SSE 按预期工作,除了它在控制台中显示以下消息:

API resolved without sending a response for /api/repositories, this may result in stalled requests.

我的假设是,因为 res.end() 没有关闭连接。但是,我为什么要关闭连接呢?我使用 API 作为 SSE.

问题是,服务器设置有问题还是我做错了什么?

要禁用警告,您可以将 custom config 添加到 API 路线,并将 externalResolver 设置为 true

externalResolver is an explicit flag that tells the server that this route is being handled by an external resolver like express or connect. Enabling this option disables warnings for unresolved requests.

export const config = {
    api: {
        externalResolver: true
    }
}