2

MVC の概念である RoR で知っているように、コントローラーはモデルから結果を取得し、それを処理してビューをレンダリングする必要があります。次のようになります。

 def index
    @movies = Movie.all
    if params[:title] || params[:director]
      @movies = Movie.search(params)
    end
  end 

現在、Express サーバーがあり、PostgreSQL(pg-promise) と jade を使用して MVC 方式で構築しようとしています。

現在、次のようなコードを含むコントローラー ファイルがあります。

//Get home page 
var router = express.Router();
 router.get('/', function(req, res, next) { 
  Movies.all(res); 
 }); 

私のモデルでは、それを処理する all 関数があります。

exports.all = function(res){
  var result = db.query('select * from movies').
    then(function (data) {
    // success;
    res.render('index',{title: 'Rotten Mango', movies: data} );
  })
    .catch(function (error) {
      // error;
      console.log('error !')
    });
};

しかし、私がやりたいことは、通常の RoR または典型的な MVC の方法で行ったように、Movies.all のデータベース クエリの結果をコントローラーに返すことです。私は何かが次のようになると想像します:

//Get home page 
var router = express.Router();
 router.get('/', function(req, res, next) { 
    // This code will return the JSON result and render into the view page
    res.render('index', Movies.all );
 }); 

しかし、これは約束を返すか、Asyncによって引き起こされるため(よくわかりません)、それを実現することはできません。どうすればよいですか?

4

1 に答える 1

2

私はこのようresに行い、テストが難しくなるため、パスはしません。

exports.all = function(){
   return db.query('select * from movies')
}

そしてあなたのコントローラーで

 router.get('/', function(req, res, next) { 
  Movies.all()
  .then(function(data) { res.send(data); })
  .catch(function(err) { res.status(500).send(err) }) 
 }); 
于 2016-01-17T17:30:19.900 に答える