为Sails.js应用程序初始化MongoDB数据库和用户的build议方法是什么?

我正在探索编写一个与mongodb数据存储对话的Sails.js应用程序。 我已经得到了所有的工作,但我希望能够添加一些类似于rake admin:createRails世界中运行的npm install点的初始化过程。

我猜测这可以通过一个grunt任务来完成,但是我想,在我推出自己的解决scheme之前,我会问其他的Sails / MongoDB用户他们在现实世界中究竟做了什么,看看是否一致或最佳实践解决scheme已经出现。

Sails应用程序的数据库初始化通常在config/bootstrap.js文件中完成 。 一个简单的会是这样的:

 module.exports = function(cb) { User.findOrCreate( // Search for user with "admin" flag {admin: true}, // Create one if no such user is found {admin: true, name: 'Admin User', ...} ).exec(cb); } 

只有当Sails被解除时,引导程序才会运行,服务器在执行callback之前不会启动。 如果你发送任何东西作为callback的第一个参数,它将被认为是一个错误(像大多数标准的节点callback),将停止解除服务器。

请注意,您无法使用Waterline创build实际的数据库。 一个Grunt任务将是一个很好的地方,但你必须考虑到Grunt不能访问Sailsconfiguration,所以你必须硬编码数据库的名称使用,或find其他方式使其可configuration。 这可能会影响不同的环境(即发展与生产)。 在Balderdash的项目中,我们通常在开发完代码之后将数据库创build作为开发人员的手动步骤,然后使用bootstrap.js初始化数据。 这允许开发人员使用config/local.js来维护自己的数据库设置。

所有这一切,我可以看到在创build一个生产数据库的Grunt任务的价值,使其更容易部署您的Sails应用程序的最终目的地。

我个人认为sails.js团队使用Grunt是一个明智的决定。 Grunt为您所需的任何自动化提供了可靠和灵活的解决scheme。

我在我的sails.js项目中使用了一切,包括…

  • 从旧数据库导入数据
  • 编译sass(尽pipesails默认使用较less)
  • 编译coffeescript
  • assembly淘汰赛模板
  • 将索引加载到elasticsearch中

你不会失望,使用Grunt,这是很容易开始…. 所以去吧!