特别声明:此篇文章内容来源于@Aditya Sridhar 的How to use NodeJS without frameworks and external libraries
NodeJS最常用于Express 框架。许多其他外部库也使用了NodeJS。
这些框架和库与NodeJS 一起使用的原因是使开发更容易,更快捷。
在处理任何实际项目时,最好在需要时使用框架和库来实现更快的开发😄
也就是说,在这篇文章中,我将展示如何在不使用Express 框架或任何其他外部库的情况下使用NodeJS 构建简单REST API。本文仅使用NodeJS 本身提供的那些功能。
这样做的原因是为了展示NodeJS 如何在没有框架和库的情况下使用😄。这也将更好地了解NodeJS 的工作原理
前期准备
按照https://nodejs.org 安装NodeJS。
代码
我的github 仓库中提供了本文的代码。
从代码开始😄
创建一个名为simple-rest-apis-nodejs-without-frameworks
的文件夹。 这将是我们的NodeJS 项目文件夹。
进入项目文件夹并使用npm init
将项目转换为NodeJS 项目。执行此操作的命令是
1 | cd simple-rest-apis-nodejs-without-frameworks |
package.json
运行npm init
后,将在项目文件夹中创建package.json
文件。
package.json
包含有关项目的信息,如项目名称,版本,描述等。另外,package.json
是添加Node 依赖项的地方。在本文中,我们不会有任何依赖关系,因为我们只使用NodeJS 本身提供的功能。
第一个API
server.js
在项目文件夹中创建一个名为server.js
的文件。这将是我们应用的起点。
将以下代码复制到server.js
中
1 | const hostname = '127.0.0.1' |
这段代码实际上依赖于一个名为controller.js
的文件,我们将很快添加它。 此代码告诉服务器需要侦听localhost
上的3000
端口
服务器创建在controller.js
中完成
controller
这是我们将创建服务器并定义其余端点的文件。创建一个名为controller.js
的文件
让我们先在controller.js
中创建一个GET 端点
1 | const http = require('http') |
首先导入http
和url
模块。这些模块由NodeJS 本身提供。
http
模块可以创建Web 应用程序。它支持客户端和服务器操作。
url
模块用于解析网址
http.createServer((req, res) => {
表示需要创建一个http 服务器,其请求为req,响应为res
module.exports
用于将此文件导出为模块。这就是我们可以使用const server = require('./controller.js')
在server.js
中导入controller.js
的原因
可以看出,这个文件需要service.js
,我们稍后会讨论。
代码const reqUrl = req.parse(req.url, true)
获取请求url
并解析它,以便我们可以在其上运行一些url
函数。
我们要创建的第一个端点是一个GET
端点,端点url
为/sample
为了进行url
路由,我们将使用if else条件
行if (reqUrl.pathname == '/sample' && req.method === 'GET') {
检查请求的url
是否为/sample
,并检查请求类型是否为GET
此get
请求的逻辑出现在service.sampleRequest(req, res)
中,是service.js
中定义的函数
service.js
这是实际的api
逻辑将存在的地方。创建一个名为service.js
的文件。
将以下代码复制到service.js
中
1 | const url = require('url') |
此代码检查请求URL
是否具有名为name
的查询参数,并将其存储在name
变量中。如果不存在查询参数,则默认为字符串World
响应状态设置为200
,响应的内容类型为JSON
,最后使用res.end(JSON.stringify(response))
返回响应
因为响应变量
是一个JSON
对象,我们在它上面使用JSON.stringify
将它转换为字符串,然后再发回http
响应
现在我们可以使用该命令运行应用程序
1 | node server.js |
Testing
为了测试端点使用postman
。你可以在这里下载
在postman
中选择Get
请求并输入URL
为http://localhost:3000/sample?name=aditya
并点击发送
此请求的输出如下所示
1 | { |
现在输入网址为http://localhost:3000/sample
并点击发送
此请求的输出如下所示
1 | { |
第二个API
在本节中,我们将构建第二个API,它是一个POST
请求。此外,如果用户点击一些随机网址,我们将需要指出它是无效路由。我们也将在这里添加逻辑。
controller.js
将controller.js
中的代码更新为如下所示的代码
1 | const http = require('http') |
post端点将具有url /test
。此代码具有检查/test
端点的条件。/test
端点的逻辑将在service.testRequest(req, res)
这是在service.js
此代码还具有无效路由的else 条件
。无效路由的逻辑在service.invalidRequest(req, res)
中处理
service.js
将以下代码添加到service.js
。不要删除service.js
中的现有代码。在现有代码下面添加此代码。
1 | exports.testRequest = function (req, res) { |
对于POST
请求,在调用端点时会给出输入POST
body。
在代码中,我们需要从请求中获取此POST
body。
以下代码执行此操作
1 | req.on('data', function (chunk) { |
请求以流steam
的形式出现。此代码获取数据流并继续将其附加到body
。
req.on('end', function () {
仅在流式传输完成并且收到完整的post body
后执行。
postBody = JSON.parse(body)
此代码将输入的post body
转换为JSON格式,以便我们可以使用其中的值。
在代码中我们在postBody
中使用value
字段。
响应的设置类似于我们为GET
请求所做的操作。
无效请求的逻辑
将以下代码添加到service.js
。不要删除service.js
中的现有代码。在现有代码下面添加此代码。
1 | exports.invalidRequest = function (req, res) { |
对于无效请求,状态设置为404
,内容类型设置为text
。发回的实际内容是Invalid Request
Testing
进入postman
。选择请求类型为POST
并键入以下URL http://localhost:3000/test
。
同时选择如图所示的Body
,raw
和application/json
输入Post body
如下
1 | { |
点击postman
发送
API 输出如下
1 | { |
你也可以尝试使用无效请求。在postman
中选择GET
并输入URL http://localhost:3000/test123
对此的响应将是Invalid Text
恭喜😄
你现在知道如何在不使用任何框架或外部库的情况下在NodeJS 中创建REST API
在真实项目中,尽可能使用框架或库来使开发更容易,更快捷