将URL参数传递到Node.js中的数据库查询中

时间:2018-06-22 14:34:28

标签: node.js

我正在尝试将URL参数传递到SQL查询中。我有一列称为"puppy_id",其中一个值是puppy1。 我想称呼这个URL:-localhost:3000/api/puppies/puppy1 并且应该在数据库SELECT * FROM puppytable WHERE puppy_id='puppy1'中执行查询并返回输出。

我没有问题可以连接到数据库。但是,这表明没有数据返回。我认为我在执行查询时做错了。

我的代码:-

index.js

var express = require('express');
var router = express.Router();

var db = require('../queries');

router.get('/api/puppies/:puppy_id', db.getPuppyStatus);

module.exports = router;

queries.js

module.exports = {
  getPuppyStatus: getPuppyStatus
};

function getPuppyStatus(req, res, next) {
  var puppyID = parseInt(req.params.puppy_id);
  db.any('select * from puppytable where puppy_id =$1', puppyID)
    .then(function (data) {
      res.status(200)
        .json({
          status: 'success',
          data: data,
          message: 'Retrieved puppies'
        });
    })
    .catch(function (err) {
      return next(err);
    });
}

queries.js在项目目录的根目录中。 它是从index.js

在这里呼叫
var db = require('../queries');

这是我的输出:-

{"status":"success","data":[],"message":"Retrieved puppies"}

要在执行console.log(puppyID);时进行调试,它会给我NaN

推荐的方法是什么?

2 个答案:

答案 0 :(得分:1)

我看不到req.params.family_id的来源,但看起来应该是req.params.puppy_id-如下所示-否则它将是未定义的,与数据库中的任何内容都不匹配。< / p>

function getPuppyStatus(req, res, next) {
  var puppyID = req.params.puppy_id; 
  //call puppy_id, not family_id
  //puppy_id is also a string being passed in, it can't be turned into an integer
  db.any('select * from puppytable where puppy_id =$1', puppyID)
    .then(function (data) {
      res.status(200)
        .json({
          status: 'success',
          data: data,
          message: 'Retrieved puppies'
        });
    })
    .catch(function (err) {
      return next(err);
    });
}

答案 1 :(得分:0)

您正在将number和“ {puppy1””转换为string。这就是您获得NaN的原因。

我不知道您的栏中的id是什么类型。 您有两种选择:

idnumber,请尝试发送数字而不是字符串,并且您的代码应该没问题。

idstring一样,删除parseInt。

 var puppyID = req.params.puppy_id;