怎样在Ubuntu 16.04 LTS上使用Express.js创建Node.js RESTful API

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com

在本教程中,您将学习怎样在Ubuntu 16.04 LTS上设置完整的RESTful API,该API将使用Node.js和Express服务HTTP请求,同时使用NGINX反向代理它。我们将使用一个名为 邮差,这是一个非常著名的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开发的所有工具。

安装邮递员

首先,您想前往 邮递员的网站,并为您的主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("https://www.vultr.com/", 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 .js

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

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

你会看见 ”'API is online'”。

API路线

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

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

/api/letters -显示A-Z中的所有字母。

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

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,以允许我们在端口上运行它 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 
                https://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从端口上的IP地址重定向所有请求 80 到我们在端口上运行的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 .js

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

保持我们的API运行

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

sudo npm install pm2 -g

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

pm2 start .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的更多信息,请访问其网站,网址为: https://expressjs.com。要了解有关NGINX和反向代理的更多信息,请访问 https://nginx.com。要了解有关PM2的更多信息,请访问以下页面 https://pm2.keymetrics.io

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com

相关阅读:

Posted in: LinuxTags: