😎 使用 Node JS 从头开始​​构建 REST Api,无需任何框架🔥 启动并运行服务器🥳 让我们构建基于 CRUD 的 REST API

2025-06-10

😎 使用 Node JS 从零开始构建 REST Api,无需任何框架

🔥 启动并运行服务器

🥳 让我们构建基于 CRUD 的 rest api

在这篇文章中,我们将学习如何从头开始在 Node js 中制作 CRUD rest api,而不使用任何框架,例如 Express、Oak 等😍。我们将使用基本的 Node http 包来构建它。

🔥 启动并运行服务器

首先,我们从 Node.js 导入 http 包。然后调用createServer()其中的方法,它会返回一个http.Server类的实例。之后,我们将调用listen()该类实例上的方法http.Server,启动 HTTP 服务器监听连接。

const http = require('http');
const server = http.createServer();
const PORT = process.env.PORT || 5000;
server.listen(PORT, () => console.log(`Server listening on port ${PORT}!!!`));
Enter fullscreen mode Exit fullscreen mode

关于 http.createServer()

http.createServer()requestListener接受一个可选参数。HTTP Server 对象可以监听计算机上的端口,并在每次发出请求时执行一个函数,即 requestListener。requestListener该函数处理来自用户的请求以及返回给用户的响应。在这个函数中,requestListener我们可以访问请求和响应参数。在这个函数中,我们将检查每个传入请求的req.urlreq.method,然后根据条件执行一些业务逻辑,并将所需的响应返回给用户✨。

🥳 让我们构建基于 CRUD 的 rest api

理论讲得够多了,现在让我们讨论一下如何构建一个简单的 CRUD api 来管理 Todos。是 github 仓库的链接,您可以从中获得完整的源代码。在这里您需要两个文件,
分别是data.jstodoController.jstodo.js您将在其中找到用于本教程的虚拟数据。因为我不想为了本教程而添加数据库和所有那些东西让事情变得复杂。todoController.js您将在中找到一些我们可以对这些数据执行的功能,例如通过 id 查找 todo 或获取所有 todo 之类的。您可以随意浏览这两个文件。\
我们将有五种途径来管理 todo。

  • url:/api/todos和方法:GET——获取所有待办事项的路线。
  • url:/api/todos/:id和方法:GET- 通过其 id 路由获取待办事项。
  • url:/api/todos/:id和方法:PATCH——通过其 id 来更新待办事项的路线。
  • url:/api/todos/:id和方法:DELETE- 通过其 id 删除待办事项的路线。
  • url:/api/todos/:和方法:POST——创建新待办事项的路线。

在编写任何路线之前,我们需要了解res参数上的两种方法requestListener

  1. writeHead()- 此方法将 HTTP 状态码和一组响应标头发送回客户端。状态码用于指示请求的结果。例如,每个人都遇到过 404 错误,表示找不到页面。示例服务器返回状态码 200,表示成功。
  2. end()- 此方法向服务器发出信号,表示所有响应头和正文均已发送;服务器应认为此消息已完成。每次响应都必须调用方法response.end()。在此方法中,我们将传递希望作为响应返回给用户的数据。

(1)获取所有待办事项的路线。

首先,我们将分别检查传入请求的url是否为。如果是,我们将借助获取所有待办事项,然后如果一切顺利,我们将状态代码设置为200,表示请求已成功。在这里,我们还将标头设置为,告诉客户端返回内容的内容类型是JSON格式。我们将在每个路由中设置此标头,并在每个请求中将数据转换为JSON字符串。然后,如果传入请求的不匹配,我们将状态代码设置为404,表示未找到,我们将发送路由未找到的消息作为响应。method/api/todosGETdata.jstodoController.jsContent-Type : application/jsonurlmethod

const server = http.createServer(async (req, res) => {
    if (req.url === '/api/todos' && req.method === 'GET') {
        const todos = await Todo.findAll();
        res.writeHead(200, { 'Content-Type': 'application/json' });
        res.end(JSON.stringify(todos));
    }   else {
        res.writeHead(404, { 'Content-Type': 'application/json' });
        res.end(JSON.stringify({ message: 'Route not found!' }));
    }
});
Enter fullscreen mode Exit fullscreen mode

在开发过程中测试 API 时,您可以根据需要使用任何客户端。我更喜欢使用 Postman 来测试我的 API。您可以在这里下载适用于任何平台的 Postman。
获取全部.jpg

(2)通过 id 获取待办事项

对于此路由,我们的流程也相同。唯一的区别在于,我们不会获取所有待办事项,而是获取单个待办事项并返回响应。在此路由中,我们将使用一个动态参数 id,该参数将被传递给路由本身,并根据该参数获取特定的待办事项。

if (req.url.match(/\/api\/todos\/([a-z A-Z 0-9]+)/) && req.method === 'GET') {
        try {
            const id = req.url.split('/')[3];
            const todo = await Todo.findById(id);
            res.writeHead(200, { 'Content-Type': 'application/json' });
            res.end(JSON.stringify(todo));
        } catch (error) {
            res.writeHead(404, { 'Content-Type': 'application/json' });
            res.end(JSON.stringify({ message: 'Todo not found!' }));
        }
    }
Enter fullscreen mode Exit fullscreen mode

测试后我们会得到类似\的回应
获取一个.jpg

(3)通过 id 删除待办事项的路由

在此路线中,我们首先会检查是否为req.method\DELETE
路线与上述路线相同,唯一的区别是我们不会通过 id 获取,而是通过其 id 删除待办事项,并将消息作为响应发送给用户。

if (req.url.match(/\/api\/todos\/([a-z A-Z 0-9]+)/) && req.method === 'DELETE') {
        try {
            const id = req.url.split('/')[3];
            await Todo.deleteById(id);
            res.writeHead(200, { 'Content-Type': 'application/json' });
            res.end(JSON.stringify({ message: 'Todo deleted successfully!!!' }));
        } catch (error) {
            console.log(error);
            res.writeHead(404, { 'Content-Type': 'application/json' });
            res.end(JSON.stringify({ message: 'Todo not found!' }));
        }
    }
Enter fullscreen mode Exit fullscreen mode

在 Postman 中测试后
删除一个.jpg

这就是这个的全部内容。要了解如何创建剩下的两个路由,即一个用于创建 todo ,一个用于更新 todo ,请访问satishnaikawadi.me。

希望大家至少能理解我在这篇文章里解释的内容😇。如有疑问,请随时提问。

鏂囩珷鏉ユ簮锛�https://dev.to/satishnaikawadi2001/build-rest-api-with-node-js-without-any-frameworks-from-scrach-3c6m
PREV
使用令牌桶算法进行速率限制 速率限制令牌桶实现
NEXT
😬每个开发人员都应该知道的 15 个非常重要的 JavaScript 字符串方法