2015-05-26 2 views
3

Я пишу сценарий Loopback, который, как предполагается, вызывается cron.Сценарий консоли Loopback не выходит

Для того, чтобы получить app объект, я

var app = require('./server/server'); 

# Script logic 
console.log('done'); 

Однако, сценарий не завершается, когда он завершает выполнение. Как мне заставить его выйти?

Ссылка: http://docs.strongloop.com/display/public/LB/Working+with+LoopBack+objects

+0

ли ./server/server запуска сервера HTTP, но не в состоянии закрыть его? –

+0

Что такое './Server/server'? Если он создает объект для '.listen()', скрипт не выйдет немедленно. –

+0

Я не уверен, идея в том, что я могу получить доступ к объекту «app» и, в конечном счете, получить доступ к моделям и т. Д. – uzyn

ответ

4

Наконец выяснили причину этой проблемы.

Проблема связана с подключением к базе данных (в моем случае, mongodb через loopback-connector-mongodb) по-прежнему подключен.

Чтобы отключить соединение с базой данных, а затем выход из консоли скрипт

var app = require('./server/server'); 
app.dataSources.DATASOURCENAME.disconnect(); 
0

В некоторых местах я прочитал, что этот вопрос является сервер HTTP предотвращения сценария от закрытия.

Я закончил с модулем, который даже не запустить сервер HTTP, я назвал его loopback-init.js и я обычно импортировать его из миграции и сценариев (важная часть обычай обратного вызова передается boot()):

'use strict'; 

const Promise = require('bluebird'); 
const loopback = require('loopback'); 
const boot = require('loopback-boot'); 
const logger = require('logger'); 
const app = loopback(); 

boot(app, __dirname + '/../server', err => { 
    if (err) throw err; 

    logger.debug('Loopback initialized.'); 
    app.start = function() { 
     app.close = function(cb) { 
      app.removeAllListeners('started'); 
      app.removeAllListeners('loaded'); 
      if (cb) cb(); 
     }; 
    }; 
}); 

const autoMigrate = Promise.promisify(
    app.dataSources.db.automigrate, 
    {context: app.dataSources.db} 
); 

app.autoMigrate = autoMigrate; 
module.exports = app; 

и мои db-migrate скрипты выглядеть следующим образом:

'use strict'; 

var dbm; 
var type; 
var seed; 

/** 
    * We receive the dbmigrate dependency from dbmigrate initially. 
    * This enables us to not have to rely on NODE_PATH. 
    */ 
exports.setup = function(options, seedLink) { 
    dbm = options.dbmigrate; 
    type = dbm.dataType; 
    seed = seedLink; 
}; 

exports.up = function(db) { 
    const lb = require('loopback-init'); 
    return lb.autoMigrate('Item') 
     .then(lb.close, lb.close); 
}; 

exports.down = function(db) { 
    return db.dropTable('item'); 
}; 

exports._meta = { 
    "version": 1 
}; 
Смежные вопросы