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

・12 分钟阅读

在本教程中你将学习如何在Ubuntu 16.04 LTS上设置一个完整的restful API,它将使用node,js和Express,为HTTP请求提供服务,使用nginx反向代理它,我们会使用一个叫Postman的应用程序,这是一个非常着名的API开发工具,用于测试我们的API并确保它完全正常运行并正常工作。Node.js是一个基于Chrome V8引擎的快速,跨平台的JavaScript框架。它在桌面和服务器应用程序中都被使用,因为它的线程事件循环处理而闻名,我们会使用Node.js作为RESTful API的后端,捆绑Express.js,我们的web应用框架是为node.js构建的,Express.js作为免费和开放软件发布。Express是服务器端,用JavaScript编写,用于构建API,这对我们的项目非常适合,另一方面,邮递员是一个非常强大的HTTP客户端,考虑到API开发。它具有你可能需要的所有API开发工具。

安装Postman

首先,你想去postman的网站,为你的电脑下载并安装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

本教程会使用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编辑器open打开它。

 
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 -显示来自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是用于网络服务,反向代理,流媒体和更多信息的众所周知的开源软件,我们会使用nginx来反向代理我们的API允许我们在端口80 上运行它,因为node,js不允许在没有根访问的情况下在端口小于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地址的所有请求重定向到端口8080

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


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

应用程序会在端口80上运行,简单地使用Postman运行测试,以确保一切正常工作。

保持我们的API运行

在生产环境中,你希望确保为node应用程序提供流程管理器,以确保它们在后台永远运行。在本教程中,我们将使用名为PM2 (流程经理2 )的流程管理器,它是Node.js应用程序的流程管理器,PM2提供了许多有用的管理工具,比如,停止,重新加载,暂停以及更多,要安装PM2,请键入以下命令,并且等待它安装。


sudo npm install pm2 -g

一旦安装完成,你需要做的就是确保你在项目目录中,键入以下内容,并启动应用程序。


pm2 start <filename>.js

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

如前所述,PM2有一些有用的工具,你可以使用它们来更好地管理你的应用程序。

  • pm2 stop -正如名称所示,这允许你停止当前正在运行的应用程序,并终止它的进程,如果你的应用程序产生意外结果,那么停止它会派上用场。

  • pm2 list -列表函数允许你通过,查看所有当前运行的应用程序,以它名称映射,如果你需要快速检查应用程序的运行时间,则应该使用此工具。

  • pm2 restart - 如果你的应用程序由于某种原因冻结,并且你想重新加载它,pm2 restart就是这样做的。它会终止应用程序进程,并在不同的进程下再次启动它。

  • pm2 monit pm2 monit工具允许你查看特定的应用程序详细信息,如cpu/ram使用情况,如果你想要显示应用程序负载的可视图片,这非常有用。

最后备注

现在,我们已经完成了创建RESTful API的任务,利用node.js,express和Nginx反向代理,你可以使用新的API做很多事,例如,添加身份验证方法,数据库,更好的路由和错误处理等等。如果你有一个已设置为IP地址的"A "记录的域名,则你可以从你的域名访问你的API。如果你想了解有关Express.js的更多信息,请访问他们的网站http://expressjs.com ,要了解有关Nginx和反向代理的更多信息,请访问http://nginx.com ,要阅读有关PM2的更多信息,请访问它页面http://pm2.keymetrics.io

Yanyan profile image