2016-01-17 17 views
1

據我所知RoR中,MVC的概念,我的控制器應該從模型和HANDELING它之後的結果和渲染視圖,像這樣:如何在Express中將pg-promise的結果返回給我的控制器?

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

現在我有一個Express服務器,我嘗試以MVC方式構建它,使用PostgreSQL(pg-promise)和jade。

目前,我有一個控制器文件,如下代碼:

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

而且在我的模型,我有一個全功能處理:

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 !') 
    }); 
}; 

但我想什麼做的是將Movies.all的數據庫查詢結果返回給我的控制器,就像我們通常在RoR或典型的MVC方式中那樣。我想的東西會是這樣的:

//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); 
}); 

但因爲這將返回引起異步的承諾或(我不知道),所以我不能做到這一點,我該怎麼辦?

回答

1

我會這樣做,不通過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) }) 
}); 
+0

感謝西蒙!這有助於我弄清楚!有時候只需要用其他方式來思考。 – TotoLai

相關問題