网易首页 > 网易号 > 正文 申请入驻

在 VS Code Debugger 中调试 Node js Express API

0
分享至

使用我们的说明使用 Visual Studio Code 调试基于 Express 的 API,以创建一个简单的 API。参考本教程来调试基于 JavaScript 的 API。

当我们创建软件时,我们很少会在没有错误的情况下完成它。API 创建不能免除这一事实,因此迟早我们需要对其进行调试。在 JavaScript 中,调试任务的第一站通常是登录到控制台,但使用调试器可以为我们提供更集成的体验。

Node js 是一个跨平台的开源 JavaScript 运行环境,允许 JavaScript 在服务器端运行


有很多指南可以找到最好的 node js 训练营,但在本教程中,我们将学习如何在 Visual Studio Code 或简称 VS Code 的帮助下调试基于 Express 的 API。
Express是“用于 Nodejs 的极简 Web 框架”。它允许我们将函数直接链接到 API 端点,这是构建 API 的一种快速而简单的方法。
Visual Studio Code是一个“简化的代码编辑器,支持调试、任务运行和版本控制等开发操作。”
我们还将使用cURL向我们的 API 发送请求。
如何
我们将使用 Express 框架创建一个简单的 API,然后尝试借助 VS Code 的调试功能而不是控制台对其进行调试。然后,您可以继续轻松添加 API 端点并进行 API 调用。
API 设置
首先,我们创建一个新的 Node js 项目并安装我们的依赖项。
$ mkdir api
$ cd api
$ npm init
$ npm i express body-parser
接下来,我们创建一个index.js文件作为我们的主服务器脚本。
const express = require("express");
const bodyParser = require("body-parser");
const users = [{ id: 0, name: "admin" }];
const server = express();
server.use(bodyParser.json());
server.get("/users", (_, response) => response.send({ users }));
server.get("/users/:id", ({ params: { id } }, response) => {
const user = users[id];
response.send({ user });
});
server.post("/users", ({ body }, response) => {
const { user } = body;
user.id = users.length;
users.push(user);
response.send({ user });
});
server.listen(9999, () =>
console.log("API running on http://localhost:9999")
);
我们使用users数组作为我们的内存数据存储。它使用管理员用户进行初始化。
接下来,我们创建我们的 Expressserver并使用bodyParser包的 JSON 中间件;它允许我们访问存储在POSTHTTP 请求正文中的 JSON 字符串的值。
然后,我们创建三个 API 端点。两个GET端点,因此我们可以通过 ID 和一个端点请求所有用户和一个特定用户的列表POST来创建新用户。
让我们使用以下命令启动 API!
$ node .
API running on http://localhost:9999
使用 API
现在我们的 API 已经启动并运行了,我们可以尝试使用 cURL 查询它。为此,我们需要打开一个新的终端窗口并执行以下命令。
创建用户:
$ curl -H "Content-Type:application/json" -d '{"user":{"name": "kay"}}' localhost:9999/users
{"user":{"id":1,"name":"kay"}}
列出所有用户:
$ curl localhost:9999/users
{"users":[{"id":0,"name":"admin"},{"id":1,"name":"kay"}]}
列出一位用户:
$ curl localhost:9999/users/1
{"user":{"id":1,"name":"kay"}}
创建另一个用户:
$ curl -H "Content-Type:application/json" -d '{"users":{"name": "xing"}}' localhost:9999/users
Error
...
不好了!我们在 JSON 中有一个错字,users而不是user. 由于我们没有在POST /users端点中处理这个问题,Express 只是响应了一个 HTML 格式的错误。
这是一个简单的问题示例,可以毫不费力地修复,但是让我们用它来启动 VS Code 的调试器,这样我们就可以在运行时直接调查出了什么问题。
使用 VS Code 的调试器
使用 VS Code 调试 Node js API 非常简单。
我们检查要调试的端点,并在端点触发的函数内设置断点。这是通过左键单击行号左侧来完成的。让我们在第 15 行做,这应该是我们POST /users端点函数的第一行。
行号 15
然后我们通过单击顶部菜单中的Debug->Start Debugging或按F5来启动调试器。
开始调试
VS Code 将为我们启动我们的应用程序和调试器。它还将通过 Node.js 的调试协议将两者链接在一起。
然后我们重新发送导致 cURL 错误的请求并尝试找出发生了什么。
$ curl -H "Content-Type:application/json" -d '{"users":{"name": "xing"}}' localhost:9999/users
此请求将运行链接到的函数POST /users并在其第一行的断点处停止。
如果我们查看代码左侧的侧边栏,我们可以看到一个VARIABLES类别,其中包含各种子类别,例如Block和Local。让我们打开Local,看看里面有什么。
块和本地类别
正如我们所见,我们有两个局部变量,body一个是 type Object,response一个是 type ServerResponse。
让我们使用F10进入下一行,看看会发生什么。
一切似乎都按预期工作。
让我们再次进入下一行。
繁荣!
不知何故,我们最终进入了代码库的完全不同的地方?
错误
似乎我们通过设置id我们的user对象创建了一个错误,这是怎么发生的?
让我们index.js再次打开,将断点移动到第 16 行,按F5让调试器运行到事件循环的末尾。
然后用 cURL 重新发送请求,看看在我们尝试设置之前发生了什么user.id。
当我们查看VARIABLES/Block类别中的侧边栏时,我们可以看到我们的user对象实际上是undefined! 如果我们打开VARIABLES/Local类别,我们也可以看到原因。
变量/块和变量/本地
我们body有一个属性,但是我们在第 15 行users尝试从中解构一个user变量,这导致我们在第 16 行尝试写入时出错。user.id
现在我们知道了我们的问题,让我们停止调试器并修复它。
server.post("/users", ({ body }, response) => {
const { user } = body;
if (!(user instanceof Object))
return response.send({ error: '"user" object missing in JSON!' });
user.id = users.length;
users.push(user);
response.send({ user });
});
让我们重新启动我们的服务器,让它运行新代码:
$ node .
API running on http://localhost:9999
并重新发送我们有问题的请求:
$ curl -H "Content-Type:application/json" -d '{"users":{"name": "xing"}}' localhost:9999/users
{"error":"\"user\" object missing in JSON!"}
最后,我们得到一个有用的 JSON 格式的错误消息。
结论
在 VS Code 的集成调试器的帮助下调试基于 Node.js 的 API 是一项简单的任务。我们只需要设置一个断点,不涉及额外的代码。
它为我们提供了许多开箱即用的运行时洞察力,包括:
当前变量的值
观察单个变量的能力
当前调用堆栈
当前加载的脚本

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
申请美签“邪修捷径”火了:大量OnlyFans成人片博主申请艺术家签证

申请美签“邪修捷径”火了:大量OnlyFans成人片博主申请艺术家签证

小星球探索
2026-05-13 14:59:00
这跟不穿有啥区别?赵露思演唱会内衣外穿:被众嘲一套比一套辣眼

这跟不穿有啥区别?赵露思演唱会内衣外穿:被众嘲一套比一套辣眼

胡一舸南游y
2026-05-13 15:23:56
夜景中的美女,身材真好

夜景中的美女,身材真好

蓝色海洋009
2026-05-13 17:06:46
最后时刻,黄仁勋挤上飞向北京的“空军一号”

最后时刻,黄仁勋挤上飞向北京的“空军一号”

中国新闻周刊
2026-05-13 20:56:03
一季度失业保险基金支出536.6亿元,同比增长15.4%

一季度失业保险基金支出536.6亿元,同比增长15.4%

爆角追踪
2026-05-13 10:25:49
多地国央企开始发侮辱性工资了!

多地国央企开始发侮辱性工资了!

灯锦年
2026-05-13 20:15:38
网红白冰偷税后首发声,自曝被好兄弟坑几千万,还要把他送进去

网红白冰偷税后首发声,自曝被好兄弟坑几千万,还要把他送进去

扒虾侃娱
2026-05-13 14:10:49
扎心!朋友孩子的班34人处于“零就业”状态,引热议

扎心!朋友孩子的班34人处于“零就业”状态,引热议

火山詩话
2026-05-13 15:02:14
郑强翻车,翻得一点也不冤!

郑强翻车,翻得一点也不冤!

梳子姐
2026-05-13 12:19:44
特朗普访华随行名单:夫人缺席,次子夫妇、鲁比奥随行,黄仁勋作为临时增加人员登上空军一号

特朗普访华随行名单:夫人缺席,次子夫妇、鲁比奥随行,黄仁勋作为临时增加人员登上空军一号

大风新闻
2026-05-13 11:24:16
炸了!巴拉圭总统在台湾当场 “翻脸”!

炸了!巴拉圭总统在台湾当场 “翻脸”!

有态度的何总
2026-05-13 08:20:57
“摸奶子”惹争议!OPPO的流量反噬来了?莫奈:我背锅?!

“摸奶子”惹争议!OPPO的流量反噬来了?莫奈:我背锅?!

品牌新
2026-05-13 17:03:19
“摸奶子”再惹争议,OPPO的流量反噬开始了

“摸奶子”再惹争议,OPPO的流量反噬开始了

品牌头版
2026-05-13 10:18:15
特斯拉中国官宣全新优惠,5.59 万即可提 Model 3 了!

特斯拉中国官宣全新优惠,5.59 万即可提 Model 3 了!

XCiOS俱乐部
2026-05-13 14:22:27
3-2逆转中亚劲旅,中国男足2连胜,比韩国净胜球少屈居第二

3-2逆转中亚劲旅,中国男足2连胜,比韩国净胜球少屈居第二

侧身凌空斩
2026-05-13 21:30:47
特朗普专机落地!抵达北京开启访华行程

特朗普专机落地!抵达北京开启访华行程

看看新闻Knews
2026-05-13 20:44:02
浙江瑞安某中学5名学生怀孕?当地警方:相关人员散布谣言已被拘留

浙江瑞安某中学5名学生怀孕?当地警方:相关人员散布谣言已被拘留

台州交通广播
2026-05-13 20:18:02
特朗普访华,美国驻华大使馆的评论区亮了

特朗普访华,美国驻华大使馆的评论区亮了

历史总在押韵
2026-05-13 18:29:26
重磅!国家正式出手!不生孩子的时代要结束了?

重磅!国家正式出手!不生孩子的时代要结束了?

一口娱乐
2026-05-13 18:11:47
太突然!香港80后“地产女王”烧炭身亡,曾向朋友发信息称要自杀!她草根出生,做过百亿级收购,生前已陷入严重财务困境

太突然!香港80后“地产女王”烧炭身亡,曾向朋友发信息称要自杀!她草根出生,做过百亿级收购,生前已陷入严重财务困境

每日经济新闻
2026-05-13 19:54:12
2026-05-14 02:00:49
牛马科技
牛马科技
业务数码玩家.无聊的博主
5998文章数 615关注度
往期回顾 全部

科技要闻

阿里年营收首破万亿,AI终于不再是画大饼

头条要闻

女子闪婚获千万房产99%份额闪离后起诉分割 法院判了

头条要闻

女子闪婚获千万房产99%份额闪离后起诉分割 法院判了

体育要闻

14年半,74万,何冰娇没选那条更安稳的路

娱乐要闻

白鹿掉20万粉,网友为李晨鸣不平

财经要闻

美国总统特朗普抵达北京

汽车要闻

C级纯电轿跑 吉利银河"TT"申报图来了

态度原创

本地
房产
手机
公开课
军事航空

本地新闻

用苏绣的方式,打开江西婺源

房产要闻

卷疯了!最低杀到7字头!手握30万,海口楼市横着走!

手机要闻

iPhone18Pro配色敲定+iOS 27功能曝光!今年9月的苹果,料有点多

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

沙特被指3月曾对伊朗发动多次“报复性”空袭

无障碍浏览 进入关怀版