NextJS API 错误:“TypeError:res.status 不是函数”

R. *_*tte 13 typeerror typescript next.js

语境

我正在使用NextJS v11.1.1-canary.11,React v17.0.2Typescript v4.3.5.

我想基于NextJS Typescript 文档创建一个简单的 API 端点,因此我在pages/proxy名为 的文件夹中创建了一个文件login.tsx,其中包含非常简单的 API 代码:

import type { NextApiRequest, NextApiResponse } from 'next'

export default function Login(req: NextApiRequest, res: NextApiResponse) {
  res.status(200).json({ name: 'John Doe' })
}
Run Code Online (Sandbox Code Playgroud)

我的问题

当我尝试调用该 API 端点时,出现错误:

TypeError: res.status is not a function
    at Login (C:\wamp64\www\project-front\.next\server\pages\proxy\login.js:19:7)
Run Code Online (Sandbox Code Playgroud)

完整的堆栈跟踪在这里

我已经做了研究,但在 Google 或 Stackoverflow 上找不到像我这样的案例,我是 NextJS 的新手,所以我可能误解了一些东西。有人知道我做错了什么吗?

Ism*_*dni 14

你的例子效果很好。

您可以通过将文件login.ts放在pages/api/{whatever_you_want}

下一个文档:

文件夹 pages/api 内的任何文件都会映射到 /api/* 并将被视为 API 端点而不是页面。它们只是服务器端捆绑包,不会增加客户端捆绑包的大小。


小智 5

我遇到了同样的问题,就我而言,这是因为我将运行时配置为使用“experimental-edge”

如果你评论它,它会起作用,这可能是金丝雀版本的一个错误

// in next.config.js

/** @type {import('next').NextConfig} */
const nextConfig = {
  experimental: {
    appDir: true,
    transpilePackages: ["ui"],
    // runtime: "experimental-edge",
  },
};
Run Code Online (Sandbox Code Playgroud)