环回控制台脚本不退出
Loopback console script does not exit
我正在编写一个应该由 cron 调用的环回脚本。
为了获得app
对象,我做了
var app = require('./server/server');
# Script logic
console.log('done');
但是,脚本在完成执行后不会退出。我如何让它退出?
参考:http://docs.strongloop.com/display/public/LB/Working+with+LoopBack+objects
终于找到问题的原因了。
问题是由于数据库连接(在我的例子中,mongodb 通过 loopback-connector-mongodb)仍然连接。
断开数据库连接,然后退出控制台脚本
var app = require('./server/server');
app.dataSources.DATASOURCENAME.disconnect();
在某些地方,我读到问题是 http 服务器阻止脚本关闭。
我最终得到了一个甚至不启动 http 服务器的模块,我将其命名为 loopback-init.js
并且我通常从迁移和脚本中导入它(重要的部分是传递给 [=13 的自定义回调=]):
'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
};
我正在编写一个应该由 cron 调用的环回脚本。
为了获得app
对象,我做了
var app = require('./server/server');
# Script logic
console.log('done');
但是,脚本在完成执行后不会退出。我如何让它退出?
参考:http://docs.strongloop.com/display/public/LB/Working+with+LoopBack+objects
终于找到问题的原因了。
问题是由于数据库连接(在我的例子中,mongodb 通过 loopback-connector-mongodb)仍然连接。
断开数据库连接,然后退出控制台脚本
var app = require('./server/server');
app.dataSources.DATASOURCENAME.disconnect();
在某些地方,我读到问题是 http 服务器阻止脚本关闭。
我最终得到了一个甚至不启动 http 服务器的模块,我将其命名为 loopback-init.js
并且我通常从迁移和脚本中导入它(重要的部分是传递给 [=13 的自定义回调=]):
'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
};