如何在Ubuntu 16.04 LTS上使用Express.js创建Node.js RESTful API

在本教程中,您将学习如何在Ubuntu 16.04 LTS上设置完整的RESTful API,该API将使用Node.js和Express服务HTTP请求,同时使用NGINX反向代理它。我们将使用一个名为Postman的应用程序,这是一个非常著名的API开发工具,用于测试我们的API并确保其功能齐全并且可以正常工作。Node.js是基于Chrome V8引擎的快速跨平台JavaScript框架。它同时在桌面和服务器应用程序中使用,并以其单线程事件循环处理而闻名。我们将使用Node.js作为RESTful API的后端,并将其与Express.js(为Node.js构建的Web应用程序框架)捆绑在一起。Express.js作为免费和开放软件发布。Express是用JavaScript编写的服务器端程序,专为构建API而设计,非常适合我们的项目。另一方面,考虑到API开发,Postman是一个非常强大的HTTP客户端。它具有您可能需要用于API开发的所有工具。

安装邮递员

首先,您想访问Postman的网站,并为您的主PC(而不是服务器)下载并安装Postman。所有安装说明将在其网站上。

安装Node.js

首先,我们首先需要安装Node.js,以便我们可以开始开发API。我们将从官方网站下载并安装Node.js。

 curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
 sudo apt-get install -y nodejs

此外,您还将希望获得必要的构建工具,这将有助于编译模块。

sudo apt-get install build-essential

在本教程中,我们将使用LTS版本的Node.js,即版本8.9.3。

初始化我们的Node.js项目

我们将需要初始化一个新的Node.js项目,其中将包含一个应用程序。为此,请创建一个新目录。

 mkdir expressapi 

转到新目录。进入内部后,运行npm init并完成所有必需的提示。记下应用程序的“入口点”:稍后将创建此文件。完成后,您将package.json在当前目录中看到一个文件。它充当了我们项目的描述,并列出了运行所需的所有依赖项。

设置Express.js

现在,我们将配置Express.js及其依赖项。

npm install express

安装过程将开始。一切都需要几分钟才能完成下载。

开始我们的主文件

接下来,我们将为API创建主要的开始文件。在这里,您将使用在package.json文件中看到的“入口点” 。为了本教程的缘故,我将使用默认的命名方案index.js

touch index.js

然后,在nano文本编辑器中将其打开。

nano index.js

在我们的主文件中,我们要首先调用所有主包并注册我们的路线。

var express = require('express');        
var app = express();                 
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
var port = process.env.PORT || 8080;  
const router = express.Router();
router.get('/', function(req, res) {
    res.json({ message: 'API is Online!' });   
});

app.use('/api', router);
app.listen(port);
console.log('Listening on port ' + port);

基本上,我们在这里所做的是初始化我们的应用程序,并为我们的API设置一个基本路由器。请注意,我们将应用程序的端口设置为8080。当我们配置RESTful API时,我们将需要此编号。现在,我们准备开始测试我们的API。

使用Postman测试我们的API

在项目目录中,运行以下命令。

node <filename>.js

这将启动API,这<filename>是您在package.json文件中指定的起始文件。然后,在PC / Mac上打开Postman New,然后单击右上角的“ ”按钮,然后单击“ Request”。在那里,您应该会在GET旁边看到一个显示“ ” 的栏。在这里,我们将输入我们的请求URL。只需在“请求URL”部分中输入以下内容,然后单击“ Send”。

`http://your-server-ip:3000/api` 

您会看到“ 'API is online'”。

API路线

为了处理路由,我们将使用Express路由器。如果您不知道路由器是什么,那么本质上就是应用程序端点如何响应客户端请求。以下是我们将设置的路线作为示例:

  • /api/numbers -显示1-10之间的所有数字。

  • /api/letters -显示AZ的所有字母。

现在,我们将像这样建立我们的第一个路由中间件结构。

router.use(function(req, res, next) {
   console.log('We've got something.');
   next() //calls next middleware in the application.
});

router.route('/numbers/:number').get((req, res) => {
     res.json({result: req.params.number + 1})
});

在此示例中,我们设置了一种情况,用户可以使用GET方法通过提供数字+ 1的单词形式来请求数字的总和。我们使用router.route()函数来指出要发送回的数字。参数:在其前面带有“ ”。我们通过访问这些参数req.params

这是一个带有字母的例子。

   router.route('/letters/:letter').get((req, res) => {
     res.json({result: req.params.letter.toUpperCase()})
});

我们使用与上述相同的方法,但是我们将字母大写回发。

NGINX简介

NGINX是用于Web服务,反向代理,流式传输等的著名开源软件。我们将利用NGINX反向代理我们的API,以允许我们在port上运行它80,因为Node.js不允许没有root访问权限的端口小于1024。将您的域链接到服务器时,这可以派上用场。

设置NGINX

要开始安装NGINX,您需要在终端中运行以下命令,然后等待安装完成。

sudo apt-get install nginx

接下来,我们将要创建我们的站点文件,NGINX将使用它来反向代理我们的应用程序。

sudo nano /etc/nginx/sites-available-api.js

用以下内容填充文件,然后按CTRL+ O进行保存。

server {
          listen 80;
          location / {
                proxy_set_header X-Real-IP 
                $remote_addr;
                proxy_set_header 
                X-Forwarded-For 
                $proxy_add_x_forwarded_for;
                proxy_set_header Host 
                $http_host;
                proxy_set_header 
                X-NginX-Proxy true; proxy_pass 
                http://127.0.0.1:8080/;
                proxy_redirect off;
                proxy_http_version 1.1;
                proxy_set_header Upgrade 
                $http_upgrade;
                proxy_set_header Connection 
                "upgrade";
                proxy_redirect off;
                proxy_set_header 
               X-Forwarded-Proto $scheme;
       }
}

使用我们之前运行应用程序时使用的端口,我们告诉Nginx将所有请求从端口80上的IP地址重定向到端口上运行的API 8080

接下来,通过将我们新创建的文件符号链接到该sites-available文件夹来启用反向代理:

sudo ln -s /etc/nginx/sites-available/api /etc/nginx/sites-available

这将确保NGINX将反向代理我们的API。

首次与NGINX一起运行

完成NGINX配置后,我们将启动NGINX,然后启动我们的API。首先,重启NGINX。

sudo systemctl restart nginx

然后,回到您的API目录,然后启动它。

node <filename>.js

该应用程序将在port上运行80。只需使用Postman从上方运行测试,以确保一切正常。

保持我们的API运行

在生产环境中,您想要确保您的Node应用程序具有流程管理器,以确保它们在后台永远运行。在本教程中,我们将使用一个名为PM2的流程管理器(Process Manager 2),该流程管理器是Node.js应用程序的流程管理器,它将在最小的停机时间内使它们永远存活。PM2带有许多有用的管理工具,例如停止,重新加载,暂停等等。要安装PM2,请键入以下内容并等待其安装。

sudo npm install pm2 -g

安装完成后,您要做的就是确保您位于项目目录中,键入以下内容,然后将启动应用程序。

pm2 start <filename>.js

使用PM2管理我们的应用程序

如前所述,PM2具有一些有用的工具,可用于更好地管理应用程序。

  • pm2 stop-顾名思义,这使您可以停止当前正在运行的应用程序并终止其进程。如果您的应用程序产生了意外的结果,那么停止它会很方便。

  • pm2 list-列表功能使您可以通过PM2查看所有当前正在运行的应用程序,并按其名称进行映射。如果您需要快速检查应用程序的正常运行时间,则应使用此工具。

  • pm2 restart-如果您的应用程序由于某种原因而冻结,而您想重新加载它,则pm2 restart可以做到这一点。它将终止应用程序进程,并在另一个进程下重新启动它。

  • pm2 monit-PM2的内置监视工具使您可以在用户友好的ncurses样式图中查看应用程序特定详细信息的图表,例如CPU / RAM使用情况。如果您想要直观地了解应用程序的负载,这将很有用。

结束语

现在,我们已经完成了使用Node.js,Express以及使用NGINX反向代理来创建RESTful API的任务。随意扩展本教程。您可以使用新的API进行很多出色的工作,例如添加身份验证方法,数据库,更好的路由和错误处理等等。如果您有一个域,并且已经在IP地址上设置了“ A”记录,那么您将可以从域中访问API。如果您想了解有关Express.js的更多信息,请访问其网站http://expressjs.com。要了解有关NGINX和反向代理的更多信息,请访问http://nginx.com。要了解有关PM2的更多信息,请访问其页面http://pm2.keymetrics.io



Leave a Comment

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

什麼是日誌文件系統,它是如何工作的?

什麼是日誌文件系統,它是如何工作的?

我們的計算機以稱為日誌文件系統的有組織的方式存儲所有數據。這是一種有效的方法,可以讓計算機在您點擊搜索時立即搜索和顯示文件。 https://wethegeek.com/?p=94116&preview=true

技術奇點:人類文明的遙遠未來?

技術奇點:人類文明的遙遠未來?

隨著科學的快速發展,接管了我們的大量工作,我們陷入無法解釋的奇點的風險也在增加。閱讀,奇點對我們意味著什麼。

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

2021 年人工智能對醫療保健的影響

2021 年人工智能對醫療保健的影響

過去幾十年,醫療保健領域的人工智能取得了巨大飛躍。因此,醫療保健中人工智能的未來仍在日益增長。