Hapi.js 是一款基于 Node.js 平台的 Web 服务器框架,其提供了非常方便易用的 API,让开发者可以快速地搭建 Web 应用或者 API 服务。在 Hapi.js 的开发过程中,一般会分为两个阶段:开发者模式和生产模式。
开发者模式
在开发者模式下,我们一般会使用 hapi
命令行工具来启动 Hapi.js 应用,例如:
hapi server
在这种情况下,Hapi.js 会在命令行窗口输出详细的调试信息,并且会自动重新加载应用程序以响应更改。这为开发者提供了一种非常便捷的开发体验。
此外,在开发者模式下,我们还可以使用 hapi-dev-errors
插件来改进调试体验。这个插件会捕获应用程序中的未处理异常,并将其友好地呈现给开发者。例如:
-- -------------------- ---- ------- ----- ---- - ---------------------- ----- --------- - --------------------------- ----- ------ - --- ------------- ----- ----- ----- ----------- --- ----- -------- ------ - ----- --------------------------- -------------- ------- ------ ----- ---- ---------------- -- - ----- --- ------------ --------- ---- --------- - --- ----- --------------- ------------------- ------- -- --------------------- - -------展开代码
在这个例子中,我们使用 hapi-dev-errors
插件来捕获未处理异常。当我们访问 localhost:3000
时,应用程序会崩溃并输出以下信息:
Error: Oops! Something went wrong. at exports.handler (/path/to/app.js:13:13) at processTicksAndRejections (internal/process/task_queues.js:95:5)
这对于对于调试来说是非常有帮助的。
生产模式
在生产模式下,我们需要使用 pm2
或者其他进程管理器来启动 Hapi.js 应用,例如:
pm2 start app.js --name myapp
在这种情况下,Hapi.js 会启动一个守护进程,并监听指定的端口。我们可以使用 pm2
的日志记录功能来查看应用程序的输出和错误日志。例如:
pm2 logs myapp
在生产模式下,我们还需要注意一些安全方面的问题。例如,我们一般不会在应用程序的输出中输出敏感信息,例如数据库的密码、API 密钥等等。此外,我们还需要开启 HTTPS 来确保通信的安全性。
以下是一个简单的生产模式下的 Hapi.js 应用程序:
-- -------------------- ---- ------- ----- ---- - ---------------------- ----- ------ - --- ------------- ----- ----- ----- ------------ ---- - ---- ---------------------------------------- ----- ------------------------------------------- - --- ----- -------- ------ - ----- ----------------- ---------------------- ----------------------------- --- -------------- ------- ------ ----- ---- ---------------- -- - ------ ------- -------- - --- ----- --------------- ------------------- ------- -- --------------------- - -------展开代码
在这个例子中,我们使用了 @hapi/good
和 @hapi/good-console
插件来记录日志,并使用 HTTPS 来增强安全性。
小结
本文详细地介绍了 Hapi.js 的开发者模式和生产模式。开发者模式方便调试,生产模式则需要更多的安全注意事项。我们需要了解这两种模式的特点,并根据实际情况来选择。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c35280314edc2684d30dc5