在Ubuntu 16.04上,如何使用Express.js创建Node.js RESTful API
Yanyan
・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 。