如何在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

如何在CentOS 7上安装Oxwall

如何在CentOS 7上安装Oxwall

Oxwall是一个开源社交网络软件平台,可用于免费构建自定义社交网站(SNS)。在这篇文章中,

如何在Ubuntu 16.10上安装Review Board

如何在Ubuntu 16.10上安装Review Board

使用其他系统?Review Board是一个免费且开源的工具,用于检查源代码,文档,图像等。这是基于网络的软件战

如何在Debian 9 LAMP VPS上安装October 1.0 CMS

如何在Debian 9 LAMP VPS上安装October 1.0 CMS

使用其他系统?October 1.0 CMS是基于Laravel框架构建的简单,可靠,免费和开源的内容管理系统(CMS)

如何使用Ubuntu 15.10在Vultr服务器上安装Xubuntu桌面

如何使用Ubuntu 15.10在Vultr服务器上安装Xubuntu桌面

Xubuntu是XFCE + Ubuntu!XFCE是Ubuntu的轻量级GUI /桌面。Vultr服务器需要其他依赖项,默认情况下未安装这些依赖项。

如何在Debian 9上安装Monica

如何在Debian 9上安装Monica

使用其他系统?Monica是一个开源的个人关系管理系统。可以将其视为CRM(销售团队使用的一种流行工具

如何使用SSL和安全密码保护由Nginx驱动的网站

如何使用SSL和安全密码保护由Nginx驱动的网站

简介SSL(代表安全套接字层)及其后续版本TLS(代表传输层安全性)是需要加密的加密协议。

如何在Fedora 26 LAMP VPS上安装MODX Revolution

如何在Fedora 26 LAMP VPS上安装MODX Revolution

使用其他系统?MODX Revolution是一种快速,灵活,可扩展,免费和开源的企业级内容管理系统(CMS),由

如何在Ubuntu 17.04上安装JuliaLang

如何在Ubuntu 17.04上安装JuliaLang

朱莉娅(Julia)通常称为JuliaLang,是一种用于数值计算的编程语言。Julia的速度和C一样快,但是却不牺牲可读性

在Ubuntu 14.04上安装Ruby on Rails

在Ubuntu 14.04上安装Ruby on Rails

Ruby on Rails(RoR)是用Ruby编程语言编写的框架,可让您将Ruby与HTML,CSS和类似的程序结合使用。

在Fedora 28上安装Anchor CMS

在Fedora 28上安装Anchor CMS

使用其他系统?Anchor是用PHP编写的轻量级开源博客CMS。Anchors源代码托管在GitHub上。本指南将向您展示

将Debian 9升级到Debian 10

将Debian 9升级到Debian 10

简介Debian 10(Buster)是Debian 9(Stretch)的后继产品。它于2019年7月6日发布。在本教程中,我们将升级一个existin

如何管理Linux服务器时区设置

如何管理Linux服务器时区设置

在Linux服务器上正确设置日期和时间非常重要。您的服务器日志和其他重要信息都将反映时区

如何在Ubuntu 16.04上安装Taiga项目管理工具

如何在Ubuntu 16.04上安装Taiga项目管理工具

使用其他系统?Taiga是用于项目管理的免费和开源应用程序。与其他项目管理工具不同,Taiga使用增量

在Ubuntu上配置Nagios:第1部分-Nagios服务器

在Ubuntu上配置Nagios:第1部分-Nagios服务器

本文是有关在Ubuntu 14.04上安装和配置Nagios的2部分系列文章的一部分。第1部分:Nagios服务器第2部分:远程主机概述Nagio

如何访问Vultr VPS

如何访问Vultr VPS

Vultr提供了几种不同的方式来访问VPS以进行配置,安装和使用。访问凭据VPS ar的默认访问凭据

如何在Debian 9上安装Grav CMS

如何在Debian 9上安装Grav CMS

使用其他系统?Grav是用PHP编写的开源平面文件CMS。Grav源代码公开托管在GitHub上。本指南将向您展示如何

如何在Fedora 26 LAMP VPS上安装Pagekit 1.0 CMS

如何在Fedora 26 LAMP VPS上安装Pagekit 1.0 CMS

使用其他系统?Pagekit 1.0 CMS是一个美观,模块化,可扩展,轻量级,免费和开源的内容管理系统(CMS),具有

如何在Ubuntu 16.04 LAMP VPS上安装BigTree CMS

如何在Ubuntu 16.04 LAMP VPS上安装BigTree CMS

使用其他系统?BigTree CMS 4.2是一种快速,轻量级,免费和开源的企业级内容管理系统(CMS),具有广泛的功能。

如何在CentOS 7上设置vsFTPd

如何在CentOS 7上设置vsFTPd

FTP是用于通过Internet传输文件的有用协议,本指南将向您展示如何设置vsFTPd(非常安全的文件传输协议守护程序)o

在Debian / Ubuntu中使用Rsync设置文件镜像

在Debian / Ubuntu中使用Rsync设置文件镜像

简介如果您经营一个重要的网站,则最好将文件镜像到辅助服务器。如果您的主服务器有网络

在Arch Linux上使用Makepkg

在Arch Linux上使用Makepkg

在Arch Linux上使用Makepkg可以避免系统污染,确保仅安装必要的依赖关系。

如何在Ubuntu 16.04上安装OpenSIPS控制面板

如何在Ubuntu 16.04上安装OpenSIPS控制面板

快速学习如何在Ubuntu 16.04上安装OpenSIPS控制面板,为VoIP提供商提供支持的功能。

在Fedora 28上安装Akaunting

在Fedora 28上安装Akaunting

学习如何在Fedora 28上安装Akaunting,一款适合小型企业和自由职业者的开源会计软件。

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

使用其他系统?Mailtrain是一个基于Node.js和MySQL / MariaDB构建的开源自托管新闻通讯应用程序。

诊断Minecraft服务器延迟和低TPS

诊断Minecraft服务器延迟和低TPS

了解導致Minecraft延遲的原因和解決方案,包括優化伺服器性能和減少滯後的步驟。

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 機器變磚。閱讀這篇文章以了解更多信息