serverless express可以与sails.js应用程序一起使用吗

serverless express可以与sails.js应用程序一起使用吗,express,sails.js,aws-lambda,Express,Sails.js,Aws Lambda,奇怪的是,谷歌没有这方面的任何信息 我想在即将到来的项目中使用aws lambda。我想用sails.js构建它。我知道aws无服务器express允许在lambda上运行express应用程序。这是否也适用于sails,还是不起作用?我使用的是sails.js,但我不会将其放入Lambda函数中,因为它太胖,需要几秒钟才能启动,并且不符合Lambda函数的使用模式。当然,我知道,如果您已经在Lambda函数中实现了模型和服务,那将是一件非常好的事情——我也将讨论这个问题 如果你还想试试,你可以

奇怪的是,谷歌没有这方面的任何信息


我想在即将到来的项目中使用aws lambda。我想用sails.js构建它。我知道aws无服务器express允许在lambda上运行express应用程序。这是否也适用于sails,还是不起作用?

我使用的是sails.js,但我不会将其放入Lambda函数中,因为它太胖,需要几秒钟才能启动,并且不符合Lambda函数的使用模式。当然,我知道,如果您已经在Lambda函数中实现了模型和服务,那将是一件非常好的事情——我也将讨论这个问题

如果你还想试试,你可以

  • 剥离Lambda sails.js(在
    .sailsrc
    中尽可能多地禁用,并尽可能多地禁用中间件)和
  • 尝试使用Lambda的相同容器策略()

我在AWS Lambda上成功地使用了
waterline.js
。是Sails.js的ORM组件

在船帆罩下,它使用express,因此可以使用无服务器。尽管正如曼纽尔提到的,它对兰博达来说可能太胖了

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
        }
      }
    }
  }
}
在我的express routes之前,我创建了一个中间件函数,将我的模型与应用程序挂钩

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);
  });
});
通过一些调整,您可以将模型放置在外部文件中并自动加载到中。并根据环境交换数据库详细信息。下面是我使用的配置函数

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;

你有什么合适的解决办法吗?