当前位置: 首页 > news >正文

使用Node.js与Express构建RESTful API

💖 博客主页:瑕疵的CSDN主页
💻 Gitee主页:瑕疵的gitee主页
🚀 文章专栏:《热点资讯》

使用Node.js与Express构建RESTful API

    • 1 引言
    • 2 Node.js与Express简介
    • 3 安装Node.js与Express
    • 4 创建Express项目
    • 5 创建API路由
    • 6 数据存储
    • 7 身份验证与授权
    • 8 错误处理
    • 9 部署应用
    • 10 测试API
    • 11 总结
    • 12 参考资料

1 引言

Node.js是一个开放源代码、跨平台的JavaScript运行环境,用于开发服务器端和网络应用。Express是Node.js的一个流行框架,它简化了构建Web应用和API的过程。本文将详细介绍如何使用Node.js与Express框架来构建一个RESTful API。
一张展示使用Node.js与Express构建RESTful API的流程图,包括安装Node.js与Express、创建Express项目、创建API路由、数据存储、身份验证与授权、错误处理以及部署应用等内容。

2 Node.js与Express简介

Node.js允许使用JavaScript编写服务器端代码,Express则为开发者提供了丰富的特性,如路由、中间件、错误处理等,使开发过程更加简单快捷。

3 安装Node.js与Express

首先,确保你的计算机上已安装了Node.js,然后安装Express。

npm install express

4 创建Express项目

使用Express创建一个新的项目。

node-rest-api/
├── package.json
├── package-lock.json
├── node_modules/
├── .gitignore
├── README.md
├── app.js
└── routes/└── api.js

编辑 app.js 文件来初始化Express应用。

const express = require('express');
const app = express();app.use(express.json()); // 中间件解析JSON请求体const PORT = process.env.PORT || 3000;app.listen(PORT, () => {console.log(`Server running on port ${PORT}`);
});

5 创建API路由

创建一个API路由来处理HTTP请求。

// routes/api.js
const express = require('express');
const router = express.Router();// GET 请求示例
router.get('/', (req, res) => {res.status(200).json({ message: 'Welcome to our API!' });
});module.exports = router;

app.js 中使用这个路由。

const apiRoutes = require('./routes/api');app.use('/api', apiRoutes);

6 数据存储

使用内存存储来模拟数据持久化。

let items = [{ id: 1, name: 'Item One' },{ id: 2, name: 'Item Two' },
];router.get('/items', (req, res) => {res.json(items);
});router.post('/items', (req, res) => {const newItem = req.body;items.push(newItem);res.status(201).json(newItem);
});

7 身份验证与授权

使用JSON Web Tokens (JWT)来进行身份验证。

npm install jsonwebtoken
// routes/api.js
const jwt = require('jsonwebtoken');
const secretKey = 'yourSecretKey';function authenticateToken(req, res, next) {const authHeader = req.headers['authorization'];const token = authHeader && authHeader.split(' ')[1];if (token == null) return res.sendStatus(401);jwt.verify(token, secretKey, (err, user) => {if (err) return res.sendStatus(403);req.user = user;next();});
}router.use(authenticateToken);

8 错误处理

添加错误处理中间件来捕获和处理错误。

app.use((err, req, res, next) => {console.error(err.stack);res.status(500).send('Something broke!');
});

9 部署应用

可以使用Heroku或其他云服务提供商来部署你的Node.js应用。

git push heroku master

10 测试API

使用Postman或curl命令来测试API。

curl --location --request POST 'http://localhost:3000/api/items' \
--header 'Content-Type: application/json' \
--data-raw '{"name":"NewItem"}'

11 总结

通过本文,我们介绍了如何使用Node.js与Express框架来构建RESTful API,包括安装Node.js与Express、创建Express项目、创建API路由、数据存储、身份验证与授权、错误处理以及部署应用。掌握了这些基础知识后,你可以开始构建自己的RESTful API了。

12 参考资料

  • [1] Express.js Documentation. (2024). Expressjs.com. Retrieved from [Express.js文档链接]

相关文章:

使用Node.js与Express构建RESTful API

💖 博客主页:瑕疵的CSDN主页 💻 Gitee主页:瑕疵的gitee主页 🚀 文章专栏:《热点资讯》 使用Node.js与Express构建RESTful API 1 引言 2 Node.js与Express简介 3 安装Node.js与Express 4 创建Express项目 5…...

从0开始搭建一个生产级SpringBoot2.0.X项目(二)SpringBoot应用连接数据库集成mybatis-plus

前言 最近有个想法想整理一个内容比较完整springboot项目初始化Demo。 连接Oracle数据库集成mybatis-plus&#xff0c;自定义WrapperFactory。配置代码生成器 一、引入jar包 <!--oracle驱动 --><dependency><groupId>org.springframework.boot</groupI…...

Docker部署教程:打造流畅的斗地主网页小游戏

Docker部署教程&#xff1a;打造流畅的斗地主网页小游戏 一、项目介绍项目简介项目预览 二、系统要求环境要求环境检查Docker版本检查检查操作系统版本 三、部署斗地主网页小游戏下载镜像创建容器检查容器状态查看容器日志安全设置 四、访问斗地主网页小游戏五、总结 一、项目介…...

redis的客户端

目录 redis的客户端一&#xff1a;jedis1&#xff1a;jedis的使用步骤&#xff1a;2&#xff1a;jedis连接池 二&#xff1a;springDataRedis1:入门使用2&#xff1a;配置序列化器3&#xff1a;stringRedisTemplate redis的客户端 一&#xff1a;jedis 1&#xff1a;jedis的使…...

图片分类标注工具python

图片分类标注工具 运行代码&#xff1a;将代码保存到 Python 文件中并运行。选择文件夹&#xff1a;运行时会弹出对话框&#xff0c;选择要分类的图片文件夹。标注分类&#xff1a;程序会逐张显示图片&#xff0c;你可以在下方输入框中输入类别标签&#xff0c;并点击“Next”…...

Rust命令行,实现自动反编译Android APK包工具

Rust-CLI实现自动反编译APK Rust提供了比较好的CLI接口,可以快速的编写命令行应用, 用于日常的工具类使用。 分享一个用Rust命令行实现自动反编译Android APK包工具&#xff0c;是之前学习Rust写的一个练手小工具&#xff0c;可以快速反编译APK&#xff0c;同时也学习下用Rust…...

10. NSTableView Table 数据表格

表格是非常重要和复杂的一个控件&#xff0c;本节会用大量篇幅来把表格这东西力求讲清楚。 基本设置 表格结构 表格是 OS X 组件中为数不多采用了MVC设计模式来实现的控件&#xff0c;即tableView–dataSource–Delegate&#xff0c;这种分层架构给处理数据带来了极大的便利…...

javase笔记8---File与IO流

File类型 简介 在程序中&#xff0c;使用java.io.File这个类来描述和操作磁盘上的一个文件或文件夹(目录)。 File这个类&#xff0c;能新建、删除、移动&#xff0c;重命名文件或文件夹&#xff0c;也能获取或者修改文件或文件夹的信息(如大小&#xff0c;修改时间等)&#xf…...

docker上传离线镜像包到Artifactory

docker上传离线镜像包到Artifactory 原创 大阳 北京晓数神州科技有限公司 2024年10月25日 17:33 北京 随着docker官方源的封禁&#xff0c;最近国内资源也出现无法拉取的问题&#xff0c;Artifactory在生产环境中&#xff0c;很少挂外网代理去官方源拉取&#xff0c;小编提供…...

【专用名词的离线语音识别在2024年底的解决方法调查-会议签到的补充】

语音识别在会议点名中的使用 概要解决问题的过程不行的一些参考可以的一个package自定义词语的拼音转换遗留的问题 小结 概要 提示&#xff1a;这里可以添加技术概要 这里只实现一个方面,每个android会议设备都可通过语音发送参会者姓名,自动转换成文字添加到人员名单. 语音采集…...

OS基础-

OS基础 内存管理 内核用户设备管理 设备框架I/O子系统网络多媒体 音频视频运维 控制台GUIdebug审计计算机组成 CPU ALUregister SPLRPCR0-R12CPSRcacheclockInterrupt Vector tableIVTRMMU/MPU 内存访问权限配置&#xff0c;支持多进程BUSMEMORYI/O单线程 特点&#xff1a;结构…...

《大型语言模型实战指南:应用实践与场景落地》一文详解大型语言模型的11种微调方法

导读&#xff1a;大型预训练模型是一种在大规模语料库上预先训练的深度学习模型&#xff0c;它们可以通过在大量无标注数据上进行训练来学习通用语言表示&#xff0c;并在各种下游任务中进行微调和迁移。随着模型参数规模的扩大&#xff0c;微调和推理阶段的资源消耗也在增加。…...

嵌入式浏览器 -- Chromium VS Firefox

嵌入式浏览器概念 嵌入式浏览器是嵌入式系统中的核心组件之一&#xff0c;用于为设备提供网络访问能力和内容显示功能。与传统PC浏览器相比&#xff0c;嵌入式浏览器更加注重性能优化和资源效率&#xff0c;同时确保核心功能可用&#xff0c;如HTML渲染、JavaScript支持和多媒…...

权限大、数量多、破坏强、管理难......企业特权访问管理怎么管?

特权账号&#xff0c;通往企业数据大门的“钥匙”。 它权限大&#xff0c;具有高危命令或操作的执行权限&#xff1b; 破坏性强&#xff0c;操作可能影响他人使用或其他系统故障&#xff1b; 信息泄露风险大&#xff0c;操作可能获取别人或其他系统相关隐私信息&#xff1b;…...

UE5 第一人称示例代码阅读0 UEnhancedInputComponent

UEnhancedInputComponent使用流程 我的总结示例分析firstthenand thenfinally&代码关于键盘输入XYZ 我的总结 这个东西是一个对输入进行控制的系统&#xff0c;看了一下第一人称例子里&#xff0c;算是看明白了&#xff0c;但是感觉这东西使用起来有点绕&#xff0c;特此梳…...

如何在Linux下安装和配置Docker

文章目录 安装前的准备在Debian/Ubuntu上安装Docker添加Docker仓库安装Docker验证安装 在CentOS/RHEL上安装Docker安装必要的软件包设置Docker仓库安装Docker启动Docker服务 Docker的基本使用拉取一个镜像运行一个容器 配置Docker创建Docker目录使用非root用户运行Docker 结语 …...

apisix的原理及作用,跟spring cloud gateway有什么区别?

apache APISIX 是一个高性能、可扩展的开源 API 网关&#xff0c;它主要用于处理 API 请求、流量管理、安全控制和服务治理。APISIX 可以将复杂的服务架构中的不同服务通过统一的网关来进行管理和监控&#xff0c;为微服务架构提供了便捷的流量入口管理方式。 APISIX 的原理 …...

华为HarmonyOS实现实时语音识别转文本

场景介绍 将一段音频信息&#xff08;短语音模式不超过60s&#xff0c;长语音模式不超过8h&#xff09;转换为文本&#xff0c;音频信息可以为pcm音频文件或者实时语音。 开发步骤 在使用语音识别时&#xff0c;将实现语音识别相关的类添加至工程。 import { speechRecogni…...

DIY可视化-uniapp悬浮菜单支持拖动、吸附-代码生成器

在Uniapp中&#xff0c;悬浮菜单支持拖动和吸附功能&#xff0c;可以为用户带来更加灵活和便捷的操作体验。以下是对这两个功能的详细解释&#xff1a; 悬浮菜单支持拖动 提高用户体验&#xff1a;用户可以根据自己的需要&#xff0c;将悬浮菜单拖动到屏幕上的任意位置&#x…...

HTTP cookie 与 session

一.Cookie 定义&#xff1a; 是服务器发送到用户浏览器并保存在浏览器上的一小块数据&#xff0c; 它会在浏览器之后向同一服务器再次发起请求时被携带并发送到服务器上。 通常&#xff0c; 它用于告知服务端两个请求是否来自同一浏览器&#xff0c; 如保持用户的登录状态、 …...

智慧停车场导航系统架构及反向寻车系统解决方案

一、系统概述&#xff1a; 随着当前室内定位导航技术在大型公共场所如政务中心、商业综合体、车站中的应用越来越多&#xff0c;人们对智慧停车场的需求也日益凸显出来&#xff0c;并且智慧停车场对大型公共场所智慧化的整体建设起到重要作用。如何更有效提高停车效率&#xf…...

【小程序上传图片封装2024,支持多图,带进度,上传头像】

import config from ./config;// 支持多图&#xff0c;显示进度 export function uploadImages(count 1, sourceType, onLoading null, showProgress false, fileKey file) {return new Promise((resolve, reject) > {wx.chooseMedia({count: count, // 可以选择的图片数…...

[A-14]ARMv8/ARMv9-Memory-内存模型的类型(Device Normal)

ver0.1 [看前序文章有惊喜。] 前言 前面花了很大的精力把ARM构建的VMSA中的几个核心的议题给大家做了介绍,相信大家已经能够理解并掌握ARM的内存子系统的工作原理大致框架。接下来我们会规划一些文章,对ARM内存子系统的一些细节做一下介绍,使ARM的内存子系统更加的丰满。本…...

驾校管理系统|基于java和小程序的驾校管理系统设计与实现(源码+数据库+文档)

驾校管理系统平台 目录 基于java和小程序的驾校管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#…...

@Mapper使用中遇到的问题解法汇总

最近终于有时间写点代码相关的文章了&#xff0c;工作真的太忙了&#xff0c;果然又要测试又要开发的人最&#x1f402;&#x1f434;。 1.查询数据库有数据&#xff0c;但是代码中写select语句的时候查出为null Select("SELECT * FROM xx_manager order by id limit 1&q…...

深度学习:YOLO V3 网络架构解析

引言 YOLO V3&#xff08;You Only Look Once Version 3&#xff09;是YOLO系列算法的第三个版本&#xff0c;相比之前的版本&#xff0c;它在多个方面进行了优化和改进&#xff0c;不仅提升了检测精度&#xff0c;还保持了较快的检测速度。本文将详细介绍YOLO V3的主要改进以…...

SpringCloudAlibaba-Sentinel-熔断与限流

版本说明 <spring.boot.version>3.2.0</spring.boot.version> <spring.cloud.version>2023.0.0</spring.cloud.version> <spring.cloud.alibaba.version>2023.0.1.2</spring.cloud.alibaba.version>是什么 能干嘛 面试题 服务雪崩 安装使…...

mysql中的mvcc理解

是什么&#xff1a;MVCC指的是在读已提交、可重复读这两种隔离级别下的事务在执行普通的select操作时&#xff0c;访问记录的版本链的过程&#xff0c;可以使不同事务的读写操作并发执行&#xff0c;提高性能。 MVCC 隐藏字段 undo log 版本链 ReadView 1.隐藏字段&#xf…...

ETF申购赎回指南:详解注意事项与低费率券商推荐!

​ETF 申购&赎回 ETF申购赎回是个啥业务&#xff1f; 01 ETF申购、赎回是一种交易委托方式&#xff0c;指投资者通过申购方式(买入方向)获得ETF份额&#xff0c;通过赎回的方式&#xff08;卖出方向&#xff09;换掉/卖出ETF份额。ETF申购&#xff0c;通常是通过一篮子成…...

List<T>属性和方法使用

//author&#xff1a;shark_ddd using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;//使用函数来减少长度namespace List_T {class Student{public string Name { get; set; }public int Age { get; set; …...

如何让百度收录自己的网站/新闻稿发布软文平台

1. 更新-用户-手机号 2. 服务器-更新-地址簿 3. 客户端-更改-注册表-<只操作一次!> 在命令提示符中输入如下命令&#xff1a; Reg Add HKLM\Software\Policies\Microsoft\Communicator /v GalDownloadInitialDelay /t REG_DWORD /d 0 /f 4. 客户端-删除-用户信息 退出-Ly…...

wordpress 上下篇/爱站seo综合查询

1、为什么要定义函数? 定义函数&#xff08;指定它的功能和名字&#xff09;的目的就是为了使用函数。已达到精简代码的目的。 2、怎样定义函数&#xff1f; 类型标识符 函数名&#xff08;参数&#xff09;{ 声明部分&#xff1b; 语句部分 } 3、定义函数时函数后面括号中的变…...

景安wordpress主机/盘古百晋广告营销是干嘛

我们可能会有一个疑惑&#xff0c;那就是&#xff1a;当我们在本地&#xff08;自己的电脑&#xff09;安装完 MySQL 之后&#xff0c;也创建了很多的数据库啊、表啊&#xff0c;也存储了很多的数据啊&#xff0c;但是这些内容都存储到哪里了呢&#xff1f;特别是&#xff0c;当…...

网页设计与网站建设指标点/镇江网站seo

我们很容易被漂亮的代码吸引&#xff0c;也不知不觉的在自己的代码库中加入这些。却没有冷静的想过它们的优劣。这不&#xff0c;我就收集了一系列形如 “是否为……&#xff1f;” 的判断的boolean函数。 isNull: function(a){return a null; }, isUndefined: function(a){re…...

用aspx做的网站/关键词林俊杰歌词

成绩提前公布!2021省考成绩查询时间出了!最早4月15日!成绩提前公布!2021省考成绩查询时间出了!最早4月15日!《教育部关于做好2021届全国普通高校毕业生就业创业工作的通知》中明确说明&#xff1a;力争在2021年6月底以前完成全部政策性岗位招录工作。也就是说从笔试结束到6月底…...

网站建设通俗讲/b站在线观看人数在哪

前言&#xff1a; 作为一个即将毕业、正在实习的大学生&#xff0c;我也默默的进入了开发者的行列。从一开始的c#编码狗到java程序员再到现在的JS开发者&#xff0c;我一直 希望自己可以在这个万恶的互联网时代走的更远。但是我还是一个毛头小子&#xff0c;既没有技术也没有理…...