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

标签 javascript postgresql express promise pg-promise

据我所知,在 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 或由异步引起(我不确定),所以我无法实现它,我该怎么办?

最佳答案

我会这样做,而不是传递 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 - 如何将 pg-promise 的结果返回到 Express 中的 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34841224/

相关文章:

Javascript/XML DOM 不工作?

javascript - 在表单按钮 css 中的文本旁边添加图像

javascript - 如何解决 'Unhandled Promise Rejection: Error: Unable to resolve bare specifier "app.js”来自 http ://localhost:3000/'

javascript - 清除 angularjs 表单中的错误

sql - 如何创建没有循环关系的树表?

PostgreSQL - 日期过滤函数

python - 除了一只 Pandas ,所有行总和

javascript - Express.js 的 http2 协议(protocol)的最佳选择

javascript - 表达错误 - TypeError : express. Router is not a function

node.js - 使用类似操作符 inito MongoDB 的 Node JS Rest 服务