0
我使用loopback3,我正在考虑优化代码库,什么是注入应用程序对象作为参数到getUser方法从afterRemote挂钩https://loopback.io/doc/en/lb2/Remote-hooks.html,如果我可以通过直接在userService.ts中访问环回实例。注入应用程序作为参数vs导入应用程序从server.js在loopBack框架
我觉得我失去了一些重要的东西在这里,我试图总结如下
答:对于我进口是更好,因为我将有更少的代码,不存在 将无需注入应用每一次。
B.铸造的和进口 对象是相等的,_.isEqual(APP,APP)
C.我已经检查了 性能process.hrtime(),并得到了相同的结果。
应用程序/模型/ activity.ts
import {UserService} from 'app/service/userService';
import {Attach} from 'app/models/remote/activityRemote';
export = function (Activity) {
Activity.afterRemote('find', function (ctx, result, next) {
UserService.getUser(Activity.app, Activity.username)
.then(() => next())
.catch(next);
});
/**
* attach remote
*/
Attach(Activity);
};
userService.ts
import {Server} from 'app/server/interface/server';
import * as App from 'app/server/server';
import * as _ from 'lodash';
/**
* @class UserService
*/
export class UserService {
/**
* get user's public profile
* @param {Server} app loopback app
* @param {string} username
* @returns {Promise<User>}
*/
public static getUser(app: Server, username: string): Promise<User> {
return App.models.user.findOne(filter) // Equal and
return app.models.user.findOne(filter) // does the same
.then((user: User) => {
if (!user) {
return Promise.reject(ServerError.get('User not found', 404));
}
return Promise.resolve(user);
});
}
}
server.ts
import {Server} from 'app/server/interface/server';
import * as loopback from 'loopback';
import * as boot from 'loopback-boot';
let App: Server = loopback();
module.exports = App;
export = App;
App.start =() => {
return App.listen(() => {
const baseUrl = App.get('url').replace(/\/$/, '');
App.emit('started');
console.log('Web server listening at: %s', baseUrl);
if (App.get('loopback-component-explorer')) {
console.log(
'Browse your REST API at %s%s',
baseUrl,
App.get('loopback-component-explorer').mountPath
);
}
});
};
boot(App, __dirname, (err: Error) => {
if (err) {
throw err;
}
if (require.main === module) {
App.start();
}
});
感谢您的回复:) 不清楚什么是“多个回送应用程序”,您能给我一个这种情况的例子吗? – ivanproskuryakov
基本上,如果您出于任何原因多次调用'loopback()'。在测试中,你可能会这样做(这是一个[示例](https://github.com/strongloop/loopback/blob/v3.11.1/test/app.test.js#L24))。如果发生这种情况,您可能不仅仅能够导入主文件并轻松获取回送应用程序,您必须通过它。 –
看起来像它返回相同的实例都为“this.app”,“导入*作为从'loopback'回环'”和https://github.com/strongloop/loopback/blob/v3.11.1/test/app。 test.js#L24。 由于Module._load是缓存所需的模块。 来源:https://blog.risingstack.com/node-js-at-scale-module-system-commonjs-require/ – ivanproskuryakov