试图解决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
。
这将在.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"
}
]
}
由于我们不想在调试模式下启动我们的应用程序,而是要将调试器附加到已经运行的过程中。有关Launch
和Debug
之间有什么区别的更多信息,请访问here。
在launch.json
文件的右下角,单击添加配置并选择Node.js: Attach to Process
,也可以在调试器下拉列表中选择相同的内容。
现在这个过程非常简单。只需在app.js
文件或应用程序中设置的任何控制器中添加一个断点。
照常旋转服务器,并向该特定路线提出 get/post 请求。您可以在命令行中使用curl
命令或通过导航到浏览器中的特定URL来执行此操作。
现在,断点应在您的VSCODE中触发。
您可以清楚地看到,卷曲命令没有返回任何内容,因为断点是触发的。因此,现在我们可以使用VSCODE step in, pause, step over
工具。如果您遇到麻烦,请参阅下面的此GIF:
因此,现在您必须对如何直接在浏览器和代码编辑器中进行调试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。
让我们找出真正的原因。在线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ã!
我知道这是一个非常简单而愚蠢的例子。即使这是一个简单的例子,我们仍然学会了如何调试Node.js并将其应用于现实世界代码。
包起来!
总而言之,成为node.js故障排除PR会提高您的编程技能。通过调试工具和类似的技术,您可以有效地修复错误。
拥抱调试,享受编码!
在LinkedInð上关注我:https://linkedin.com/in/shrijal007
在githubð�ð»:https://github.com/shricodev
上关注我