首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用VSCode调试Nextjs Api端点

使用VSCode调试Nextjs Api端点
EN

Stack Overflow用户
提问于 2021-10-10 08:27:26
回答 3查看 1.7K关注 0票数 5

目前,我必须手动查找要在/api文件夹中的VSCode中设置断点的文件(api端点)。

我有下面的launch.json

代码语言:javascript
运行
复制
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "attach",
      "name": "Attach to application",
      "skipFiles": ["<node_internals>/**"],
      "port": 9229
    }
  ]
}

是否有一种方法可以在对特定的Nextjs路由有传入请求时自动停止或设置断点?

例如,假设我有一个/api/data.tsx

代码语言:javascript
运行
复制
import { NextApiRequest, NextApiResponse } from 'next';
import { StatusCodes } from 'http-status-codes';
import getConfig from 'next/config';

export default async (req: NextApiRequest, res: NextApiResponse): Promise<void> => {
   console.log('do some logging');
   res.status(StatusCodes.OK).json({message: 'Good job buddy!'});
}

并希望在每次传入请求时都在console.log上停止。我该怎么做呢?

EN

回答 3

Stack Overflow用户

发布于 2022-03-05 01:16:09

我也遇到了同样的问题,点击VSCode中的侧边栏来放置红色的点。

好消息是还是有办法的。在VSCode中,与其单击设置所需行上的红点,不如在该行上编写调试器。不知道为什么它会以一种方式工作,而不是另一种方式--也许还有一种调整可以使点击来设置点实际上是有效的?到目前为止,对于我来说,api路由是最好的:

npm run dev

现在,使用以下launch.json附加调试器。(我的next.js项目位于工作区文件夹的子文件夹中,因此我自己的配置需要反映这一点。下面的配置假设Next.js项目根与$workspaceFolder相同。)

代码语言:javascript
运行
复制
{
    "name": "Attach",
    "port": 9229,
    "request": "attach",
    "webRoot": "${workspaceFolder}", // mine had another subfolder here
    "cwd": "${workspaceFolder}",     // and here
    "skipFiles": [
        "<node_internals>/**"
    ],
    "type": "pwa-node"
},

现在,在VSCode中,无论您想要断点在哪里:

代码语言:javascript
运行
复制
handler.get(async (req, res) => {
  debugger;

  console.log....
});

最终会有这样的结果

票数 1
EN

Stack Overflow用户

发布于 2022-07-11 09:26:22

我知道现在答复可能太晚了,但这对其他人可能是有用的。我只是遵循这里指定的内容,https://nextjs.org/docs/advanced-features/debugging,它运行得很好。复制与调试完整堆栈相关的部分,如果代码位于子文件夹中,请记住更改目录,例如,这对我有效。

代码语言:javascript
运行
复制
 {
            "name": "Next.js: debug full stack",
            "type": "node-terminal",
            "request": "launch",
            "command": "npm run dev",
            "cwd": "${workspaceFolder}/client",
            "serverReadyAction": {
                "pattern": "started server on .+, url: (https?://.+)",
                "uriFormat": "%s",
                "action": "debugWithChrome"
            }
        }
票数 0
EN

Stack Overflow用户

发布于 2022-08-31 08:46:57

我也有同样的问题,但通过两步解决:

  1. 在VSCode settings.json:"debug.javascript.usePreview": false中添加一行
  2. 不要使用NODE_OPTIONS="--inspect"

然后你仍然可以看到未绑定的断点,但运行应用程序并再次设置断点,它将是红色的,工作良好。

更新

有时候,在API上设置断点仍然有问题,所以我花了几个小时才弄清楚真正的问题是什么。最后,我发现了这个问题:

因为当您运行Nextjs应用程序时,Node将首先运行下一个脚本,然后下一个脚本将生成一个子进程,这是您自己的代码。当您使用dev模式时,Nextjs也会自动设置NODE_OPTIONS=--inspect,但是它使用不同的端口号,并且号码会自动更改。关键是:、下一个脚本和子进程将有不同的调试端口号。是您有时无法设置断点的原因。

有几种情况:

  1. 如果您在VSCODE终端中通过键入"npm run dev“手动启动服务器,VSCODE将自动找到调试端口,您就可以了。
  2. 如果您在VSCODE之外从终端启动服务器,然后使用attach,则VSCODE将只附加一个端口,通常只附加到Nextjs脚本。这就是为什么您不能在自己的代码中设置断点。
  3. 如果您使用launch方法在launch.json中启动服务器。同样的问题也会像2号一样发生,你不能设置你的断点。

解决这个问题的方法很简单:要么从VSCODE内部终端启动服务器,要么在launch.json中添加:

"autoAttachChildProcesses":没错,

然后,您可以通过点击F5开始调试,一切都进行得很顺利。

代码语言:javascript
运行
复制
   {
      "name": "Next.js: debug full stack",
      "type": "node-terminal",
      "request": "launch",
      "command": "npm run dev",
      "serverReadyAction": {
        "pattern": "started server on .+, url: (https?://.+)",
        "uriFormat": "%s",
        "action": "debugWithChrome"
      },
      "autoAttachChildProcesses": true,
    }

您不需要添加NODE_OPTION='--inspect',也不需要添加"debug.javascript.usePreview": false

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69513546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档