我正在通过命令行运行loopback命令。
脚本如下:
const app = require('../../server/server');
let acquireToken = function() {
app.stop();
};
acquireToken();
但是,这似乎不起作用,因为stop()不是一个函数。因此,我在server.js文件中添加了以下内容:
'use strict';
let loopback = require('loopback');
let boot = require('loopback-boot');
let app = module.exports = loopback();
let winston = require('./winston');
app.start = function() {
// start the web server
return app.listen(function() {
app.emit('started');
let baseUrl = app.get('url').replace(/\/$/, '');
winston.info('Web server listening at: %s', baseUrl);
if (app.get('loopback-component-explorer')) {
let explorerPath = app.get('loopback-component-explorer').mountPath;
winston.info('Browse your REST API at %s%s', baseUrl, explorerPath);
}
});
};
let server;
app.stop = () => {
server.close();
}
// Bootstrap the application, configure models, datasources and middleware.
// Sub-apps like REST API are mounted via boot scripts.
boot(app, __dirname, function(err) {
if (err) throw err;
// start the server if `$ node server.js`
if (require.main === module)
server = app.start();
});
module.exports = app;
但是require.main ==模块阻止了它的工作,因为它提供了以下内容:
TypeError: Cannot read property 'close' of undefined
推荐的工作方式是什么?
发布于 2018-10-30 17:05:40
您的问题有点误导人,因为您试图停止从require
调用返回的express对象,所以更准确的问题是
如何从另一个脚本启动和停止侦听环回应用程序?
在server.js
中,将app.start = function()
更改为app.start = function(cb)
,并在末尾添加if (cb) {cb()};
。
'use strict';
let loopback = require('loopback');
let boot = require('loopback-boot');
let app = module.exports = loopback();
let winston = require('./winston');
app.start = function(cb) {
// start the web server
return app.listen(function() {
app.emit('started');
let baseUrl = app.get('url').replace(/\/$/, '');
winston.info('Web server listening at: %s', baseUrl);
if (app.get('loopback-component-explorer')) {
let explorerPath = app.get('loopback-component-explorer').mountPath;
winston.info('Browse your REST API at %s%s', baseUrl, explorerPath);
}
if (cb) cb();
});
};
let server;
app.stop = () => {
server.close();
}
// Bootstrap the application, configure models, datasources and middleware.
// Sub-apps like REST API are mounted via boot scripts.
boot(app, __dirname, function(err) {
if (err) throw err;
// start the server if `$ node server.js`
if (require.main === module)
server = app.start();
});
module.exports = app;
对于启动和停止回环的文件
// Setup loopback, but don't start the server
const app = require('./server');
// Define our callback function
let acquireToken = function() {
app.server.close();
console.log('closed');
};
// Hold onto the listener object so we can stop it later and start the server with the callback which executes after startup.
app.server = app.start(acquireToken);
https://stackoverflow.com/questions/53065123
复制