如何使用 MEAN 和sails.js 开始一个新项目

Posted

技术标签:

【中文标题】如何使用 MEAN 和sails.js 开始一个新项目【英文标题】:How to start a new project with MEAN and sails.js 【发布时间】:2014-02-24 10:59:30 【问题描述】:

我过去使用 node.js、express 和 angular.js 创建了一个 Web 应用程序。我正在开始一个新项目,我也想使用 MongoDB。那将是 MEAN 堆栈。仅使用 MEAN,我可以使用以下代码开始一个项目:http://mean.io/。

现在,我过去曾编写过 REST API,并且听说过sails.js,这听起来非常引人注目。它可以自动为您创建 REST API。

所以我的问题是,我将遵循哪些步骤来使用 MEAN 堆栈和sails.js 开始一个新项目

选项:

    我要克隆 mean.io 堆栈,运行 npm install 然后再运行 npm installsails.js 吗? 或者,sails.js 似乎对如何处理目录结构有自己的想法。那么我会按照他们的指示安装sails.js http://sailsjs.org/#!getStarted 然后 npm install Angular 和 Mongo 吗? (我认为我不需要 Mongoose,因为sails.js 有自己的 ORM,水线)。

我今天实际上打算尝试选项 2,但我很高兴知道哪些步骤对其他人有效。

非常感谢!

【问题讨论】:

我在谷歌上搜索了这个,但没有找到太多,所以我想我们需要从这里开始讨论。 到目前为止,我刚刚做了npm install -g sailssails new myproj 【参考方案1】:

使用npm install -g sailssails new myproj,您走在正确的道路上。由于您想使用 mongo,您需要安装 waterline adapter for mongo(在项目目录中)npm install sails-mongo --save 并配置sails 以使用mongo。

将 mongo 配置添加到 config/adapters.js 文件中:

module.exports.adapters = 
  'default': 'mongo',

  mongo: 
    module   : 'sails-mongo',
    host     : 'localhost',
    port     : 27017,
    user     : 'username',
    password : 'password',
    database : 'your mongo db name here',

    // OR
    module   : 'sails-mongo',
    url      : 'mongodb://USER:PASSWORD@HOST:PORT/DB',

    // Replica Set (optional)
    replSet: 
      servers: [
        
          host: 'secondary1.localhost',
          port: 27017 // Will override port from default config (optional)
        ,
        
          host: 'secondary2.localhost',
          port: 27017
        
      ],
      options:  // See http://mongodb.github.io/node-mongodb-native/api-generated/replset.html (optional)
    
  
;

此外,要创建您的 API,(在项目目录中)使用 sails generate NAME,其中 NAME 是模型的名称。默认情况下,可以将任何内容添加到数据库中,因此您可能希望限制属性/字段,甚至可能验证它们。这很容易。 generate 命令为您创建了一些文件,其中之一是models/NAME.js。在此文件中,您可以简单地导出一个对象,该对象具有与您想要的字段相对应的属性以及您希望在保存之前发生的任何限制/验证。

// Person.js
var Person = 
  attributes: 
    firstName: 'STRING',
    lastName: 'STRING',
    age: 
      type: 'INTEGER',
      max: 150,
      required: true
    
    birthDate: 'DATE',
    phoneNumber: 
      type: 'STRING',
      defaultsTo: '111-222-3333'
    
    emailAddress: 
      type: 'email', // Email type will get validated by the ORM
      required: true
    
  
;

module.exports = Person;

This page 列出了您可以拥有的所有不同类型和验证。

设置完成后,运行sails lift 启动服务器。默认端口是 1337,但您可以使用 PORT 环境变量或在您的 local configs

中更改它
module.exports = 
    port: 80
    // ... more config things

另外,关于 MEAN 中的“A”,请查看 Angular Sails。它是一个小角度服务,可让您轻松利用sails 为您做的socket.io 事情。您可以通过套接字连接调用所有 API,以使它们更轻、更快。

在这种情况下,$sails 替换 $http

app.controller("FooController", function ($scope, $sails) 
    $scope.bars = [];

    $sails.get("/bars", function (data) 
      $scope.bars = data;
    );
);

【讨论】:

这太棒了!谢谢你。我会在接下来的几天里跟进。 然而,在撰写本文时,sails mongo 适配器在关联方面存在问题 n 很多时候需要访问本机连接以查询子文档。您可能需要检查sails mongo 问题以了解如何它与猫鼬相比.. IMO 没有什么可以打败猫鼬,但我仍然继续前进【参考方案2】:

这里有一个很棒的样板项目,它使用 react.js 而不是 angular:https://github.com/lynnaloo/yacht-rock。

【讨论】:

以上是关于如何使用 MEAN 和sails.js 开始一个新项目的主要内容,如果未能解决你的问题,请参考以下文章

Sails.js 1.0:如何在没有Waterline的情况下连接和使用旧版MySQL数据库?

如何在 Sails.js 中定义需要来自第三个模型/表的附加条件和/或数据的模型关联?

Sails.js 使用sails-mysql 的日期的水线查询修饰符?

Sails.js:新创建的记录在刷新之前不会填充到页面上

Sails.Js - 我如何在sails.Js 中进行分页

Sails Js - 防止非模型字段保存在 mongo 文档中