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