それは関数コンテキスト内db.model.find()
クエリを処理し、マングースライブラリとコールバックと約束を使用してせずに結果を取得することは可能ですか?同期マングース要求
コントローラの実行中のユーザーがいる場合は、同じ操作(たとえば、データベースとの通信)が大量であるため、コールバックに現在のスコープを最小化できません。また、私のプロジェクトでMVCモデルを実現しようとしているので、ヘルパーライブラリ(モジュール)を別々のファイルに保存したいと思っています。だからこそ、私はコールバックや約束を使うことを望まないのです。
例えば、どのように私は(あなたがログインモデルとコントローラを無視することができます - コールバックを使用してそのコードを書き直す場合、彼らは煩雑を表現するために書かれている)(それが実際に可能かどう)が正常に実行されるように、次のコードを書き換える必要があります。
var db = require('./lib/db');
class User{
constructor(id){ //get user by id
var result = db.models.user.findOne({_id: id}); //unsupported syntax in real :(
if(!result || result._id != _id)
return false;
else{
this.userInfo = result;
return result;
}
}
}
module.exports = User;
ログインモデル
var user = require('./lib/user')
var model = {};
model.checkUserLogged(function(req){
if(!req.user.id || req.user.id == undefined)
return false;
if(!(this.user = new user(req.user.id)))
return false;
else
return true;
});
module.exports = model;
libに
user.jsの
ログインコントローラ
var proxy = require('express').router();
proxy.all('/login', function(req, res){
var model = require('./models/login');
if(!model.checkUserLogged()){
console.log('User is not logged in!');
res.render('unlogged', model);
}else{
console.log('User exists in database!');
res.render('logged_in', model);
}
});
ジェネレータ機能/利回り、非同期/のawait(es2017)、およびエトセトラすべてがちょうどネストせずに問題を解決するために使用することができます。
Thxです。
を、 '非同期/ await'は* * ES7(ES2016)の一部ではありません。今年のリリース、ES2017の一部となります。 –
注意のためのThx:私は質問のテキストでそれを修正しました。 – impulsgraw