无服务器快递可以与sails.js应用程序一起使用

时间:2017-07-26 19:29:18

标签: express sails.js aws-lambda

奇怪谷歌没有任何关于此的信息......

我想在即将推出的项目中使用aws lambda。我想用sails.js构建它。我知道有aws-serverless-express允许在lambda上运行express应用程序。这也适用于帆还是不起作用?

2 个答案:

答案 0 :(得分:0)

我正在使用sails.js,但是我不会将它放入Lambda函数中,因为它太胖了,需要几秒钟才能启动,这与Lambda函数的使用情况有关。当然,我知道在Lambda函数中使用已经实现的模型和服务会很好 - 我也会遇到这个问题。

如果您仍想尝试,可以

  • 删除Lambda sails.js(尽可能在.sailsrc中禁用并禁用尽可能多的中间件)和
  • 尝试使用Lambda的同容器策略(Example how MongoDB does it

答案 1 :(得分:0)

我在AWS Lambda上成功使用waterline.js快速和无服务器。 Waterline是Sails.js的ORM组件。

在Sails的引擎盖下,它使用express,因此可以使用无服务器。虽然Manuel提到它可能对Lambda来说太胖了。

const PGAdapter = require('sails-postgresql');
const Waterline = require('waterline');

const conf = {
  "adapters":{
    "sails-postgresql": PGAdapter
  },
  "datastores":{
    "default":{
      "adapter":"sails-postgresql",
      "port":5432,
      "poolSize":1,
      "ssl":false,
      "database":"development",
      "host":"localhost",
      "user":"***",
      "password":"****"
    }
  },
  "models":{
    "User":{
      "tableName":"users",
      "attributes":{
        "email":{
          "type":"string",
          "required":true
        },
        "first_name":{
          "type":"string"
        },
        "last_name":{
          "type":"string"
        }
      }
    }
  },
  "defaultModelSettings":{
    "primaryKey":"id",
    "datastore":"default",
    "attributes":{
      "id":{
        "type":"number",
        "autoMigrations":{
          "autoIncrement":true
        }
      }
    }
  }
}

在我的快速路线之前,我创建了一个中间件功能,将我的模型挂钩到应用程序。

app.use((req, res, next) => {
  let waterline = conf;
  Waterline.start(waterline, function(err, orm) {
    if(err) {
      console.error('Could not start up the ORM:\n',err);
      return process.exit(1);
    }
    app.models = {
      User: Waterline.getModel('user', orm)
    }
    next();
  });
});

使用结果。

app.get('/', function (req, res) {
  app.models.User.findOne({ id: 2 }).exec(function (err, result){
    console.log('err:', err);
    console.log('result:', result);
    res.json(result);
  });
});

通过一些调整,您可以将模型存放在外部文件中并自动加载它们。并根据环境交换数据库详细信息。这是我使用的配置功能。<​​/ p>

const PGAdapter = require('sails-postgresql');

function createWaterlineConf(db, models) {
  const defaults = {
    adapter:    'sails-postgresql',
    port: 5432,
    poolSize: 10,
    ssl: true
  };
  const databaseConf = Object.assign(defaults, db);

  const waterlineConf = {

    adapters: {
      'sails-postgresql': PGAdapter
    },

    datastores: {
      default: databaseConf
    },

    models: models,

    defaultModelSettings: {
      primaryKey: 'id',
      datastore: 'default',
      attributes: {
        id: { type: 'number', autoMigrations: { autoIncrement: true } },
      }
    }

  };
  return waterlineConf;
}

module.exports.createWaterlineConf = createWaterlineConf;