【问题标题】:Trouble filtering data using where in bookshelf / knex在书架 / knex 中使用 where 过滤数据时遇到问题
【发布时间】:2015-02-26 03:22:54
【问题描述】:

我是 bookshelf.js 的新手,并且在我的 node.js + MySQL 项目中将它用于 ORM。 我收到这个简单查询的错误。谁能告诉我哪里出错了?

//Get reviews for a service - TESTED
app.get('/api/review/:serviceID?', function(req, res) {
  var serviceID = req.params.serviceID;
  console.log("Service ID: " + serviceID);
  new Review.query('where','serviceID','=', serviceID)
    .fetchAll()
    .then(function(reviews) {
        if (reviews!=null)
            res.send(reviews.toJSON());
        else
            res.send("No reviews found");
    }).catch(function(error) {
        console.log(error);
        res.send('An error occurred in fetching reviews for service '+ serviceID);
    });
});

这里的评论表的主键为reviewID,serviceID为外键。 这是我收到的错误消息。

TypeError: Object [object Object] has no method 'forge'
  at new Model.(anonymous function).Collection.(anonymous function
  (d:\PMF\node_modules\bookshelf\bookshelf.js:146:24)
  at app.get.serviceID (d:\PMF\app.js:121:15)
  at Layer.handle [as handle_request]
  (d:\PMF\node_modules\express\lib\router\layer.js:82:5)
  at next (d:\PMF\node_modules\express\lib\router\route.js:110:13)
  at Route.dispatch (d:\PMF\node_modules\express\lib\router\route.js:91:3)
  at Layer.handle [as handle_request
  (d:\PMF\node_modules\express\lib\router\layer.js:82:5)
  at d:\PMF\node_modules\express\lib\router\index.js:267:22
  at param (d:\PMF\node_modules\express\lib\router\index.js:340:14)
  at param (d:\PMF\node_modules\express\lib\router\index.js:356:14)
  at Function.proto.process_params
  (d:\PMF\node_modules\express\lib\router\index.js:400:3)
  at next (d:\PMF\node_modules\express\lib\router\index.js:261:10)
  at jsonParser (d:\PMF\node_modules\body-parser\lib\types\json.js:96:40)
  at Layer.handle [as handle_request (d:\PMF\node_modules\express\lib\router\layer.js:82:5)
  at trim_prefix (d:\PMF\node_modules\express\lib\router\index.js:302:13)
  at d:\PMF\node_modules\express\lib\router\index.js:270:7
  at Function.proto.process_params (d:\PMF\node_modules\express\lib\router\index.js:321:12)
  at next (d:\PMF\node_modules\express\lib\router\index.js:261:10)
  at jsonParser (d:\PMF\node_modules\body-parser\lib\types\json.js:96:40)
  at Layer.handle [as handle_request] (d:\PMF\node_modules\express\lib\router\layer.js:82:5)
  at trim_prefix (d:\PMF\node_modules\express\lib\router\index.js:302:13)
  at d:\PMF\node_modules\express\lib\router\index.js:270:7
  at Function.proto.process_params (d:\PMF\node_modules\express\lib\router\index.js:321:12)
  at next (d:\PMF\node_modules\express\lib\router\index.js:261:10)
  at urlencodedParser (d:\PMF\node_modules\body-parser\lib\types\urlencoded.js:84:40)
  at Layer.handle [as handle_request] (d:\PMF\node_modules\express\lib\router\layer.js:82:5)
  at trim_prefix (d:\PMF\node_modules\express\lib\router\index.js:302:13)
  at d:\PMF\node_modules\express\lib\router\index.js:270:7
  at Function.proto.process_params (d:\PMF\node_modules\express\lib\router\index.js:321:12)

【问题讨论】:

  • 我也尝试过 new Review({'serviceID': serviceID}) .fetchAll() 但这给了我所有的评论,忽略了 serviceID = $serviceID 条件我试过 new Review({'serviceID ': serviceID}) .fetch() 但这给了我第一次查看 serviceID=$serviceID

标签: mysql node.js bookshelf.js knex.js


【解决方案1】:

您的Review 构造函数调用缺少括号:代码应为new Review().query... 而不是new Review.query...

附带说明一下,这种更简单的查询编写方式应该可行:

return new Review().where('serviceID', serviceID).fetchAll()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-13
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2014-05-10
    相关资源
    最近更新 更多