哈Ha! 我向您介绍了文章
“创建REST API:Web服务器基础知识”的翻译 。
第1部分:创建REST API:Web服务器基础
Web服务器是REST API最重要的组件之一。 在本文中,您将通过创建一些初始目录和文件来开始REST API项目。 然后,您将创建一个Web服务器模块并将其插入,以便Web服务器正确启动和关闭。
该项目中的代码将使用通用的目录结构进行组织,可以根据需要随时进行调整和构建。
cd ~ mkdir hr_app cd hr_app/ touch index.js mkdir config touch config/web-server.js mkdir controllers mkdir db_apis mkdir services touch services/web-server.js
index.js文件可以视为应用程序中的“主”文件。 这将是应用程序的入口。 我们将代码添加到config和services目录中的该文件和web-server.js文件中。
将以下代码粘贴到文件
Home> hr_app> config> web-server.js中 module.exports = { port: process.env.HTTP_PORT || 3000 };
在Node.js中,流程对象具有包含用户环境的env属性。 我使用它来将端口值设置为HTTP_PORT环境变量的值。 如果未定义此环境变量,则默认值为3000。
将以下代码粘贴到
Home> hr_app> services> web-server.js文件中 const http = require('http'); const express = require('express'); const webServerConfig = require('../config/web-server.js'); let httpServer; function initialize() { return new Promise((resolve, reject) => { const app = express(); httpServer = http.createServer(app); app.get('/', (req, res) => { res.end('Hello World!'); }); httpServer.listen(webServerConfig.port) .on('listening', () => { console.log(`Web server listening on localhost:${webServerConfig.port}`); resolve(); }) .on('error', err => { reject(err); }); }); } module.exports.initialize = initialize;
第1-3行:需要多个模块。 http模块包含在Node.js中,但是Express模块将需要通过npm安装。
第7-27行:声明了
一个名为initialize
的函数。 该函数立即返回一个promise,根据Web服务器是否成功启动,该promise是允许还是拒绝。
第9-10行:创建了一个新的express应用程序(实际上只是一个函数),然后用于通过http模块创建一个http服务器。
第12-14行:应用程序
的 get方法用于为到达根路径(/)的GET请求添加处理程序。 收到此类请求后,将调用回调函数,并将使用“ res”(res)参数发送响应“ Hello World!”。 给客户。
第16-24行:服务器侦听方法用于绑定到指定的端口并开始侦听传入的请求。
第28行:导出模块,以便可以在外部使用
将以下代码粘贴到文件
Home> hr_app> index.js中 const webServer = require('./services/web-server.js'); async function startup() { console.log('Starting application'); try { console.log('Initializing web server module'); await webServer.initialize(); } catch (err) { console.error(err); process.exit(1);
我们连接Web服务器模块,然后它确定并调用异步启动功能。 由于Web服务器的initialize函数返回一个promise,因此可以将其与async / await一起使用,并将其包装在try-catch块中。 如果初始化功能成功,则Web服务器将工作; 否则,任何异常都将被捕获并处理。 现在您要做的就是初始化npm并安装Express-然后就可以启动应用程序了。 在hr_app目录的终端中运行以下命令。
npm init -y npm install express -s node .
npm init命令用于创建package.json文件,npm将该文件用作清单文件(-y标志接受默认选项)。 npm install命令用于安装express(-s标志将express添加到package.json中的依赖项列表)。 Npm将您安装的模块存储在node_modules目录中。 他还创建了一个名为package.lock.json的文件,为开发团队提供了相同的树。
您是否看到消息
Web服务器正在localhost上侦听:3000? 恭喜,您已创建基于的快递服务器!
他在这里,是另一个“你好世界”。 尽管不是特别有趣,但这对于您的API来说是重要的第一步。
准备就绪后,可以通过返回终端并按ctrl + c来关闭服务器。

受控关机
在关闭期间,通过按Ctrl + C组合键,您无法控制这种情况的发生。 要控制关闭过程,您需要显式关闭Web服务器并退出Node.js进程。
将以下代码粘贴到
Home> hr_app> services> web-server.js文件中
当Web服务器成功关闭时,close函数将返回一个promise。 httpServer.close方法停止建立新的连接,但是不强制关闭已经打开的连接。 根据打开的连接数和正在执行的操作,您可能需要稍等片刻,直到回调起作用。 尽管您不会在此模块中执行此操作,但是可以使用自定义代码或npm模块(例如http-shutdown)来强制打开打开的连接。
将以下代码粘贴到文件
Home> hr_app> index.js中
SIGINT和SIGTERM事件与可以发送到进程以将其关闭的信号相关,例如,按下ctrl + c时。 当抛出JavaScript错误但未捕获并使用try-catch语句处理时,将发生uncaughtException事件。 尝试再次启动和关闭该应用程序。 当您在终端中看到“ shutdown”消息时,您会发现一切正常。
在服务器上注册
还有另一件事可以完善我们的Web服务器模块:HTTP日志记录。 您可以使用多种模块来进行这种类型的登录,但是morgan是其中一种简单的模块。 让我们使用npm安装morgan。
npm install morgan -s
然后将以下行添加到services / web-server.js中需要express的行(第2行):
const morgan = require('morgan');
现在,您可以将morgan功能启用为中间件,通过该中间件将使用app.use处理所有请求。 在调用app.get之前添加此行,该消息显示消息“ hello world”。
请注意,app.use创建了可以与HTTP请求和响应进行交互的中间件功能的管道。 中间件功能将按启用顺序执行。 重新启动该应用程序并安装终端,以便您可以同时看到它和浏览器。 每次重新加载页面时,您都应该在终端中看到一个新的日志条目。 默认情况下,morgan将日志信息传递到STDOUT(在终端中显示)。
以下文章将介绍使用数据库(包括连接池)的基础知识,这些数据库将帮助您了解和构建用于Node.js的REST API。