如何在没有框架和外部库的情况下使用NodeJS

“粉红车辆的缩时摄影灯附近的建筑物”,由埃姆雷卡拉塔什Unsplash

NodeJS最常用于Express框架。 NodeJS还使用了许多其他外部库。

这些框架和库与NodeJS一起使用的原因是使开发变得更加容易和快捷。

在处理任何实际项目时,最好在需要的地方使用框架和库以加快开发速度development

就是说,在这篇文章中,我将展示如何在不使用Express框架或任何其他外部库的情况下,使用NodeJS构建Simple REST API。 本文将仅使用NodeJS本身提供的那些功能。

这样做的原因是为了展示如何在没有框架和库的情况下使用NodeJS。 同样,这将为NodeJS的工作原理提供一个更好的主意😄

前提条件

https://nodejs.org安装NodeJS

我的github repo中提供了本文的代码。

让我们开始使用代码😄

创建一个名为simple-rest-apis-nodejs-without-frameworks的文件夹。 这将是我们的NodeJS Project文件夹。

进入项目文件夹,并使用npm init将项目变成节点项目。 为此的命令是

cd simple-rest-apis-nodejs-without-frameworks
npm init

package.json

运行npm init之后,将在项目文件夹中创建一个package.json文件。

package.json包含有关项目的信息,例如项目名称,版本,说明等。package.json也是您要添加节点依赖项的位置。 在本文中,我们将没有任何依赖关系,因为我们仅使用NodeJS本身提供的功能。

第一个API

在项目文件夹中创建一个名为server.js的文件。 这将是我们应用程序的起点。

将以下代码复制到server.js中

const hostname = '127.0.0.1';
const port = 3000;
const server = require('./controller.js');
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});

这段代码实际上依赖于一个名为controller.js的文件,我们将很快添加它。 此代码告诉服务器需要在端口3000本地主机上侦听

服务器创建在controller.js中完成

controller.js

这是我们将在其中创建服务器并定义其余端点的文件。 创建一个名为controller.js的文件

首先在controller.js中创建一个GET端点

const http = require('http');
const url = require('url');
module.exports = http.createServer((req, res) => {
var service = require('./service.js');
const reqUrl = url.parse(req.url, true );
// GET Endpoint
if (reqUrl.pathname == '/sample' && req.method === 'GET') {
console.log('Request Type:' +
req.method + ' Endpoint: ' +
reqUrl.pathname);
service.sampleRequest(req, res);
}
});

首先导入httpurl模块。 这些模块由NodeJS本身提供。

http模块可用于创建Web应用程序。 它支持客户端和服务器操作。

网址模块有助于解析网址

这行http.createServer((req, res) => {表示需要创建一个http服务器,其中request为req,response为res

module.exports用于将此文件导出为模块。 这就是为什么我们可以使用const server = require('./controller.js');server.js中导入controller.js的原因const server = require('./controller.js');

可以看出该文件需要service.js ,我们将在后面讨论。

代码const reqUrl = url.parse(req.url, true); 获取请求网址并进行解析,以便我们可以在其上运行一些url函数。

我们将要创建的第一个端点是一个GET端点,端点URL为/ sample

为了进行url路由,我们将使用if else条件

该行if (reqUrl.pathname == '/sample' && req.method === 'GET') {检查所请求的URL是否为/ sample ,还检查请求的类型是否为GET

此获取请求的逻辑存在于service.sampleRequest(req,res);中。 这是service.js中定义的函数

service.js

这是实际的api逻辑所在的位置。 创建一个名为service.js的文件。

将以下代码复制到service.js中

const url = require('url');
exports.sampleRequest = function (req, res) {
const reqUrl = url.parse(req.url, true );
var name = 'World';
if (reqUrl.query.name) {
name = reqUrl.query.name
}
var response = {
"text": "Hello " + name
};
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(response));
};

此代码检查请求URL是否具有名为name的查询参数,并将其存储在name变量中。 如果没有查询参数,则默认为字符串World

响应状态设置为200 ,响应的内容类型为JSON ,最后使用res.end(JSON.stringify(response));返回res.end(JSON.stringify(response));

由于响应变量是一个JSON对象,因此我们在返回HTTP响应之前使用JSON.stringify将其转换为字符串

现在我们可以使用以下命令运行应用程序

node server.js

测试中

为了测试端点,请使用postman 。 您可以从这里下载

在邮递员中,选择“获取请求”,然后将URL输入为http://localhost:3000/sample?name=aditya然后单击“发送”

该请求的输出如下所示

{
"text": "Hello aditya"
}

现在输入网址为http://localhost:3000/sample并点击send

该请求的输出如下所示

{
"text": "Hello World"
}

第二API

在本节中,我们将构建第二个API,即POST请求。 另外,如果用户点击了一些随机网址,我们将需要指出这是无效的路由。 我们还将在此处添加逻辑。

controller.js

controller.js中的代码更新为如下所示的代码

const http = require('http');
const url = require('url');
module.exports = http.createServer((req, res) => {
var service = require('./service.js');
const reqUrl = url.parse(req.url, true );
// GET Endpoint
if (reqUrl.pathname == '/sample' && req.method === 'GET') {
console.log('Request Type:' +
req.method + ' Endpoint: ' +
reqUrl.pathname);
service.sampleRequest(req, res);
// POST Endpoint
} else if (reqUrl.pathname == '/test' && req.method === 'POST') {
console.log('Request Type:' +
req.method + ' Endpoint: ' +
reqUrl.pathname);
service.testRequest(req, res);
} else {
console.log('Request Type:' +
req.method + ' Invalid Endpoint: ' +
reqUrl.pathname);
service.invalidRequest(req, res);
}
});

发布端点将具有url / test 。 此代码具有检查/ test端点的条件。 / test端点的逻辑将在service.testRequest(req,res);中。service.js中

此代码还为无效路由提供了else条件。 无效路由的逻辑在service.invalidRequest(req,res);中处理

service.js

将以下代码添加到service.js 。 不要删除service.js中的现有代码。 将此代码添加到现有代码下方。

exports.testRequest = function (req, res) {
body = '';
req.on('data', function (chunk) {
body += chunk;
});
req.on('end', function () {
postBody = JSON.parse(body);
var response = {
"text": "Post Request Value is " + postBody.value
};
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(response));
});
};

对于POST请求,在调用端点时会给出输入POST主体。

在代码中,我们将需要从请求中获取此POST正文。

以下代码执行此操作

req.on('data', function (chunk) {
body += chunk;
});

该请求以的形式出现。 此代码获取数据流,并将其追加到body

req.on('end', function () {仅在完成流传输并接收到完整的帖子正文后才执行。

postBody = JSON.parse(body); 这段代码将输入的帖子主体转换为JSON格式,以便我们可以使用其中的值。

在代码中,我们使用postBody中的 value字段。

响应的设置类似于我们对GET请求的响应方式。

无效请求的逻辑

将以下代码添加到service.js 。 不要删除service.js中的现有代码。 将此代码添加到现有代码下方。

exports.invalidRequest = function (req, res) {
res.statusCode = 404;
res.setHeader('Content-Type', 'text/plain');
res.end('Invalid Request');
};

对于无效请求,状态设置为404 ,内容类型设置为text 。 发回的实际内容是无效请求

测试中

去邮递员。 选择请求Type作为POST并输入以下URL http://localhost:3000/test

还要选择Bodyrawapplication / json ,如图所示

输入Post正文如下

{
"value" : "nodejs"
}

点击发送邮递员

API输出如下

{
"text": "Post Request Value is nodejs"
}

您也可以尝试使用无效请求。 在邮递员中,选择GET并将URL键入为http://localhost:3000/test123

对此的响应将是无效文本

恭喜😄

您现在知道了如何在NodeJS中创建REST API,而无需使用任何框架或外部库😄

在Real Projects中,请始终尽可能使用框架或库,以使开发周期更加轻松快捷。

关于作者

我热爱技术,并关注该领域的进步。 我也喜欢用我的技术知识来帮助他人。

随时通过我的LinkedIn帐户与我联系https://www.linkedin.com/in/aditya1811/

您也可以在Twitter上关注我https://twitter.com/adityasridhar18

我的网站: https : //adityasridhar.com/

我的其他文章

Git简介

如何有效使用Git

这个奇怪的错误是如何出现在代码中的

最初发布在 adityasridhar.com

From: https://hackernoon.com/how-to-use-nodejs-without-frameworks-and-external-libraries-97eb6acac9e3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值