当我启动基于 node.js 的站点时,是不是有清单?
Posted
技术标签:
【中文标题】当我启动基于 node.js 的站点时,是不是有清单?【英文标题】:Is there a checklist out there for when I launch a node.js based site?当我启动基于 node.js 的站点时,是否有清单? 【发布时间】:2013-06-05 05:15:13 【问题描述】:我正在使用 node.js 完成我的第一个站点的构建,我很好奇在启动它之前是否有一个我应该完成的所有事情的核对列表。在开发过程中,当我的数据库调用中不存在某些值时(使用 Mongoose),我的站点将会死掉(例如节点段错误)。
我也将在我的一个已经安装了 Apache 的 VPS 上使用它,所以我可以同时运行这两个,还是我需要研究其他的东西?
基本上,一旦启动,我想保持它,并且我想知道在这样做之前我应该知道的任何标准预防措施。
谢谢!
【问题讨论】:
【参考方案1】:鉴于 Node.js 不是像 Apache 或 IIS 这样的 Web 服务器,因此没有可遵循的配置设置清单。此外,鉴于您使用的模块和/或框架可能因您正在创建的项目而有很大差异,清单总是会遗漏一些东西……尤其是随着 Node.js 生态系统的不断发展和发展。
因此,我建议您查看此处的材料,因为它们回答了您的问题,并且无论您使用 Node.js 做什么,它们通常都很有用:
What should every programmer know about web development? - 列出你应该浏览的列表,以确保你没有忘记任何通常相关的内容。 Node Express Mongoose Demo - 示例代码,可以向您展示如何优雅地处理错误、构建代码、使用require
语句分解代码、添加特定于环境的配置等。
Node.js Best Practice Exception Handling - 处理问题的附加信息
Apache and Node.js on the Same Server - 最简单的答案是“当然,只要确保您使用不同的端口”。如果你想在 80 端口上运行和应答,那么事情就更复杂了。
我担心“当我的数据库调用中不存在某些值时”您的应用会死掉。
Mongoose 是一个不错的工具,因为它允许对单个字段进行自定义数据验证,可以过滤掉不适合您定义的架构的数据(保持文档一致),并且使用正确的设置可能会在以下情况下引发错误有“坏数据”传递给它,而不是将坏数据发送到数据库,还有更多......
我想知道你在做什么,一个未处理的错误使它通过 Mongoose 并通过任何回调函数,知道回调通常采用 function(err, data)
格式并提供处理立即出错。
【讨论】:
【参考方案2】:我目前处于类似情况(即将在私有 VPS 上部署我的第一个应用程序),这是我想出的列表:
1- 错误记录:我在这里使用了一个简单的WriteStream,没什么花哨的。
var fs = require('fs');
//You might want to specify a path outside your app
var file = './log.log';
var logger = fs.createWriteStream('./log.log');
app.configure(function()
//...
app.set(express.logger(stream:logger));
/...
);
2- 使用Forever 确保您的脚本将连续运行。是的,它们有很多其他解决方案(例如,使用 daemon),但我已经使用了一段时间了,从来没有遇到任何问题。
3- 考虑设置管理界面。这实际上是我的要求,所以我继续使用smog,它看起来非常好,尤其是对于您的客户:)。
4- 如果您永远使用,您可以使用Monit 监控其状态。查看this blog post 了解基本设置。
5- 如果您使用的是 Mongo,请考虑制定数据备份策略。此页面是very good starting point。
请注意,此列表不包含有关多应用、多机器或多核支持的任何信息。
如果您对多应用支持感兴趣,那么 nginx 似乎是一个值得信赖的解决方案。 This (brilliant) SO answer 将帮助您进行设置。
如果您有许多备用机器要使用,node-http-proxy 是由 nodejitsu 开发的,它允许您只暴露一台机器并反向代理其余机器。
如果您正在寻找多核支持,cluster 与 node 捆绑在一起,因此您可以生成 N 个不同的进程(N 是您拥有的核心数)并让它们监听共享端口。
而且,既然我们都喜欢听一个好故事,这里有几篇关于 nodejs/mongodb 在生产中的使用和经验教训的帖子: 1-Lessons learned from launching i.TV 2-Using Mongodb for 2+ billion documents on craigslist
【讨论】:
以上是关于当我启动基于 node.js 的站点时,是不是有清单?的主要内容,如果未能解决你的问题,请参考以下文章
如何在超级终端中停止运行 Node.js (Express) 服务器
无法访问我的站点中的链接(复制和粘贴):Node.js - Express.js - Webpack - Vue.js - 历史模式
node.js http.get 在向远程站点发出 5 次请求后挂起