【问题标题】:Using sails.js models outside of sails在sails 之外使用sails.js 模型
【发布时间】:2015-02-24 18:52:26
【问题描述】:

我正在尝试在sails 上下文之外使用我的Sails.js 模型。我有一个名为“Request”的简单模型,我正在使用sails-disk 适配器。 Sails 应用程序内部一切正常,但是当我尝试在应用程序外部使用模型时(我正在运行需要保存通过它的请求的单独代理服务器),我收到以下错误。似乎 this.waterline.schema 由于某种原因未定义。这是由最后一个代码示例中的“new Request()”行触发的。

注意:This question 建议使用 Sails.load 将所有内容包装在sails 服务器上下文中,但我已经有一个独立于代理服务器运行的sails 服务器,所以当我尝试这样做时会遇到各种错误。

错误:

/path-to-app/node_modules/sails/node_modules/waterline/lib/waterline/core/index.js:70
var schemaAttributes = this.waterline.schema[this.identity].attributes;

TypeError: Cannot read property 'request' of undefined

api/models/Request.js

module.exports = {
  identity: 'request',
  schema: true,
  autoCreatedAt: true,
  autoUpdatedAt: true,
  migrate: 'alter',
  attributes: {
    id: {
      type: 'string',
      primaryKey: true,
      required: true
    },

    method: 'string',
    url: 'string'
}

./proxy.js 尝试在外部脚本中加载风帆水线模型(略)

var uuid = require('node-uuid'),
  Waterline = require('sails/node_modules/waterline'),
  RequestCollection = require('./api/models/Request.js'),
  sailsDisk = require('sails-disk');

RequestCollection.adapter = 'localDiskDb';
var Request = Waterline.Collection.extend(RequestCollection);

new Request({
  adapters: {
    localDiskDb: sailsDisk
  }
}, function(err, collection) {
  if (err) {
    console.error(err);
    return;
  }

  // Save the request
  collection.create({
    id: uuid.v4(),
    method: 'foo method',
    url: 'foo url'
  }).exec();
});

【问题讨论】:

    标签: sails.js waterline


    【解决方案1】:

    您可以在不同的端口(以及任何其他常见的不可复制资源)上运行sails 服务器以避免错误

        var SailsApp = require('sails').Sails;
        var Sails = new SailsApp();
        process.env.NODE_ENV = "database";  //use a different environment settings file
        process.env.PORT = "1332";  //and a different port , blocked by firewall if needed
    
        Sails.lift({ 
            log: {
                //level: 'silly'
                level: 'silent'
            }, 
        }, function (err, sails) {
            if (err) {
                return done(err);
            }
            //do something with sails here.
        });
    

    【讨论】:

    • 我什至没有尝试再次运行sails 服务器。我在做 Sails.load,而不是 Sails.lift。
    • sails.load 可以用来代替上述代码中的sails.lift,在这种情况下您不需要更改端口。 Sails.load(function(err, sails) { .. });
    猜你喜欢
    • 1970-01-01
    • 2015-09-24
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 2014-08-14
    • 1970-01-01
    相关资源
    最近更新 更多