像Pro一样对Node.js代码进行故障排除!
#网络开发人员 #node #调试 #express

试图解决Node.js问题时感到困惑,并发现Internet的内容令人失望地有限以帮助您?在本文中,我以一些很棒的技巧来解决Node.js。

我会带您浏览真实的例子,从而使过程非常容易掌握。不再有挫败感 - 让我们成为Node.js对专家进行故障排除! ð

工具和技术

  • 使用Chrome调试器:

有一种比这更好的方法,只要与我在一起一段时间

由于Chrome默认情况下不支持Node.js调试。因此,要为此,您需要在package.json中调整启动脚本。

  "scripts": {
    "start": "node --inspect app.js"
  },

注意我正在使用的--inspect标志,请确保添加它。

让我们以此示例代码:

import express from "express"
const app = express();

app.get('/', (req, res) => {
    console.log("I am inside the server!");
    debugger;
    res.send("Response");
})

app.listen(4000);
console.log("Server Started");

调试器关键字的作用就像断点。现在,每当您使用yarn run start启动服务器时,您都会注意到它表明正在运行调试器。接下来,打开Chrome Devtools,等待几秒钟。您将看到一个node.js图标出现在DevTools面板的顶部。单击此图标,现在在“源”选项卡中,您会注意到调试器断点已被击中。现在,您可以像调试常规JavaScript代码一样调试Node.js代码。

如果您仍然不相信这种方法,并且想要更好的东西,则可以直接在代码编辑器中使用它。下一个方法是您会喜欢的东西,也是我使用的东西。

  • 使用内置编辑器调试器:

在本节中,我将使用VSCODE,并且该方法在任何其他代码编辑器中都应该非常相似。

首先,我们需要设置调试器配置。我们可以通过创建一个launch.json文件来做到这一点。

转到 运行和调试 侧栏左窗格中的部分。单击"Create a launch.json"并选择Node.js

Selector Dropdown

这将在.vscode文件夹内的项目根部创建一个launch.json文件。默认配置应与下面的JSON相似。

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Program",
      "skipFiles": [
        "<node_internals>/**"
      ],
      "program": "${workspaceFolder}\\jobs-api\\mywork\\app.js"
    }
  ]
}

由于我们不想在调试模式下启动我们的应用程序,而是要将调试器附加到已经运行的过程中。有关LaunchDebug之间有什么区别的更多信息,请访问here

launch.json文件的右下角,单击添加配置并选择Node.js: Attach to Process,也可以在调试器下拉列表中选择相同的内容。

Add Configuration

现在这个过程非常简单。只需在app.js文件或应用程序中设置的任何控制器中添加一个断点。

照常旋转服务器,并向该特定路线提出 get/post 请求。您可以在命令行中使用curl命令或通过导航到浏览器中的特定URL来执行此操作。

现在,断点应在您的VSCODE中触发。

VScode Breakpoint Debug

您可以清楚地看到,卷曲命令没有返回任何内容,因为断点是触发的。因此,现在我们可以使用VSCODE step in, pause, step over工具。如果您遇到麻烦,请参阅下面的此GIF:

Debugging Steps

因此,现在您必须对如何直接在浏览器和代码编辑器中进行调试node.js代码有基本的了解。恭喜!ðð

现实世界代码实施

足够的基本理解,现在我们将在真实的代码中练习它,在该代码中,我们使用所有这些内容并将故障代码的原因进行故障。

让我们以此失败的代码:

import express from "express";
const app = express();

const port = 3000;

function calculateFactorial(n) {
  if (n < 0) {
    return 1;
  } else {
    return n * calculateFactorial(n - 1);
  }
}

app.get("/", (req, res) => {
  res.send("Welcome to the Factorial Calculator");
});

app.get("/factorial/:number", (req, res) => {
  const number = parseInt(req.params.number);
  const factorial = calculateFactorial(number);
  res.send(`The factorial of ${number} is: ${factorial}`);
});

app.listen(port, () => {
  console.log(`Server is listening on port ${port}`);
});

如果您是经验丰富的开发人员,则一定已经发现了该错误。但是,让我们忘记它,一起进行思考过程。

简要介绍了代码,一切似乎都很好。但是,当我们转到/factorial/:id端点并输入任何数字时,输出似乎始终为0。

Code Error Result

让我们找出真正的原因。在线19 上设置一个断点,每行逐步划分。我们可以观察到number变量正确解析为整数,但是factorial变量似乎总是存储值0。这不是预期的行为,问题似乎在于calculateFactorial函数。

现在,我们确定calculateFactorial函数是罪魁祸首,让我们在第20行 Line 20 step into设置一个断点。遍历每个递归步骤,并注意到一切似乎都可以正常工作,直到N的值大于0。但是,一旦n == 0的值返回值,该函数将返回值0。

啊,我忘了在'n' is 0的值时处理案例。这就是为什么当number变量中存储任何值时,它被乘以零,从而导致整体值为0。

修改功能还可以处理n == 0情况。 calculateFactorial代码现在应该看起来像这样。

function calculateFactorial(n) {
  if (n == 0) {
    return 1;
  } else {
    return n * calculateFactorial(n - 1);
  }
}

现在,一切都应该按预期工作。 voilã!

Correct Output

我知道这是一个非常简单而愚蠢的例子。即使这是一个简单的例子,我们仍然学会了如何调试Node.js并将其应用于现实世界代码。

Congratulations Gif

包起来!

总而言之,成为node.js故障排除PR会提高您的编程技能。通过调试工具和类似的技术,您可以有效地修复错误。

拥抱调试,享受编码!

在LinkedInð上关注我:https://linkedin.com/in/shrijal007

在githubð�ð»:https://github.com/shricodev

上关注我