gpt4 book ai didi

javascript - 如何在 Express 中将 pg-promise 的结果返回给我的 Controller ?

转载 作者:行者123 更新时间:2023-11-29 12:11:01 24 4
gpt4 key购买 nike

正如我在 RoR 和 MVC 概念中所知道的,我的 Controller 应该从模型中获取结果,然后处理它并呈现 View ,如下所示:

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

现在我有一个 Express 服务器,我尝试使用 PostgreSQL(pg-promise) 和 jade 以 MVC 方式构建它。

目前,我有一个包含如下代码的 Controller 文件:

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

但我想做的是将 Movies.all 的数据库查询结果返回到我的 Controller ,就像我们通常在 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 );
});

但是因为这会返回一个 promise 或由 Async 引起(我不确定),所以我无法实现它,我该怎么办?

最佳答案

我会这样做,而不是传递 res,因为这会使测试变得困难。

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

在你的 Controller 中

 router.get('/', function(req, res, next) { 
Movies.all()
.then(function(data) { res.send(data); })
.catch(function(err) { res.status(500).send(err) })
});

关于javascript - 如何在 Express 中将 pg-promise 的结果返回给我的 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34841224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com