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

在 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.

相关推荐
热点推荐
20-1!欧洲杯大屠杀,德国倒退10年

20-1!欧洲杯大屠杀,德国倒退10年

足球大号
2024-06-15 13:35:30
删除库里合照!偷偷关注魔术!3年1.9亿仁至义尽,勇士可不是傻子

删除库里合照!偷偷关注魔术!3年1.9亿仁至义尽,勇士可不是傻子

呆呆的篮球
2024-06-16 14:37:03
2023年国家自然科学基金评审专家名单汇总

2023年国家自然科学基金评审专家名单汇总

高分子科学前沿
2024-06-16 07:53:29
姜萍中考621分,不够上当地四星级高中(江苏省四星级高中350所)

姜萍中考621分,不够上当地四星级高中(江苏省四星级高中350所)

朗威谈星座
2024-06-16 07:45:27
突发!6月14日,“大嫂”高叶被曝出大瓜!

突发!6月14日,“大嫂”高叶被曝出大瓜!

八卦爱侃娱
2024-06-16 10:40:18
江苏“第一美女辅警”的毁灭史,她的奢靡荒唐,比我们想得更恶劣

江苏“第一美女辅警”的毁灭史,她的奢靡荒唐,比我们想得更恶劣

纸鸢奇谭
2023-08-25 13:00:27
马斯克:一面是天才一面是疯子,从小混乱的家庭关系让他无法正常

马斯克:一面是天才一面是疯子,从小混乱的家庭关系让他无法正常

照见古今
2024-01-06 18:43:16
拿下NBL大合同!孙铭徽,牛啊!中国第一控卫真有能耐……

拿下NBL大合同!孙铭徽,牛啊!中国第一控卫真有能耐……

篮球实战宝典
2024-06-16 00:03:59
唯一在世的一代领导人,曾任政治局常委,如今107岁

唯一在世的一代领导人,曾任政治局常委,如今107岁

深度知局
2024-06-13 17:41:13
以色列三大港口都遭到火力封锁,相当于已经被按住命脉!

以色列三大港口都遭到火力封锁,相当于已经被按住命脉!

笔墨V
2024-06-16 03:31:34
缅北女魔头魏榕,帅哥真实自述:把我关进狗笼,我口腔感染了3次

缅北女魔头魏榕,帅哥真实自述:把我关进狗笼,我口腔感染了3次

马尔科故事会
2024-06-15 11:51:34
40年神话即将破产,F-16注定在乌克兰被大量击落

40年神话即将破产,F-16注定在乌克兰被大量击落

芯怡飞
2024-06-12 10:51:46
老人存款最好的两种方法,内部人员透露,赶紧收藏起来

老人存款最好的两种方法,内部人员透露,赶紧收藏起来

户外钓鱼哥阿旱
2024-06-15 17:17:14
白酒为什么不能冰镇之后喝?网友:在医院门口喝都赶不上趟

白酒为什么不能冰镇之后喝?网友:在医院门口喝都赶不上趟

奇特短尾矮袋鼠
2024-06-15 14:31:42
放贷者报案,广东云浮实业家被抓

放贷者报案,广东云浮实业家被抓

刘虎和朋友们
2024-06-15 21:10:08
闹剧结束!网红樊小慧遭多人控诉,宣布退网,精神状态惹人担忧

闹剧结束!网红樊小慧遭多人控诉,宣布退网,精神状态惹人担忧

甜小娱儿
2024-06-14 16:07:49
王闰秋!你瞒不住了,你指导的中专女生姜萍拿下数学竞赛全球12名

王闰秋!你瞒不住了,你指导的中专女生姜萍拿下数学竞赛全球12名

牛锅巴小钒
2024-06-14 12:24:31
福建多地持续暴雨已达7天 多条江河超警戒水位

福建多地持续暴雨已达7天 多条江河超警戒水位

北青网-北京青年报
2024-06-16 12:01:03
中专女孩名次遭质疑,“竞争对手”也发声了,为何不愿承认她优秀

中专女孩名次遭质疑,“竞争对手”也发声了,为何不愿承认她优秀

熙熙说教
2024-06-14 17:44:03
普京表示:不攻击北约、不使用核武并愿意谈判!难道要服软了?

普京表示:不攻击北约、不使用核武并愿意谈判!难道要服软了?

翻开历史和现实
2024-06-13 22:56:43
2024-06-16 15:04:49
墨谈科技
墨谈科技
业务数码玩家.无聊的博主
2991文章数 567关注度
往期回顾 全部

科技要闻

iPhone 16会杀死大模型APP吗?

头条要闻

牛弹琴:梅洛尼和马克龙吵了一架 晚宴上眼神可"杀人"

头条要闻

牛弹琴:梅洛尼和马克龙吵了一架 晚宴上眼神可"杀人"

体育要闻

没人永远年轻 但青春如此无敌还是离谱了些

娱乐要闻

上影节红毯:倪妮好松弛,娜扎吸睛

财经要闻

打断妻子多根肋骨 上市公司创始人被公诉

汽车要闻

售17.68万-21.68万元 极狐阿尔法S5正式上市

态度原创

家居
艺术
房产
数码
公开课

家居要闻

空谷来音 朴素留白的侘寂之美

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

房产要闻

万华对面!海口今年首宗超百亩宅地,重磅挂出!

数码要闻

优派 XG323-4K-OLED-2 显示器预告:原生 10bit、全功能 Type-C

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版