Loopback控制台脚本不会退出

时间:2015-05-26 14:23:49

标签: node.js loopbackjs

我正在编写一个应该由cron调用的Loopback脚本。

为了获得app对象,我做

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

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

但是,脚本在完成执行后不会退出。如何让它退出?

参考:http://docs.strongloop.com/display/public/LB/Working+with+LoopBack+objects

2 个答案:

答案 0 :(得分:4)

最后找出了这个问题的原因。

问题是由于数据库连接(在我的情况下,通过loopback-connector-mongodb的mongodb)仍然连接。

断开数据库连接,然后退出控制台脚本

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

答案 1 :(得分: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
};