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

Node.js 将URL参数传递到nodejs中的数据库查询中,node.js,Node.js,我正在尝试将URL参数传递到SQL查询中。我有一个名为“puppy\u id”的列,其中一个值是puppy1。 我想调用此URL:-localhost:3000/api/puppies/puppy1 它应该在数据库SELECT*FROM puppytable WHERE puppy_id='puppy1'中执行查询并返回输出 我可以连接到数据库。但是,这表明没有返回任何数据。我想,我在执行查询时做错了什么 我的密码:- index.js var express = require('expres

我正在尝试将URL参数传递到SQL查询中。我有一个名为
“puppy\u 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;
querys.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);
    });
}
querys.js
位于项目目录的根目录中。 它从这里调用
index.js

var db = require('../queries');
这是我的输出:-

{"status":"success","data":[],"message":"Retrieved puppies"}
在执行
console.log(pupyid)时进行调试,它给了我
NaN


推荐的方法是什么?

我不知道
req.params.family\u id
来自哪里,但它看起来应该是
req.params.puppy\u id
-如下-否则它将是未定义的,与数据库中的任何内容都不匹配

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

我看不出
req.params.family_id
来自何处,但它看起来应该是
req.params.puppy_id
——如下所示——否则它将是未定义的,与数据库中的任何内容都不匹配

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

您正在转换为
数字
字符串
“puppy1”。这就是您得到
NaN
的原因

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

  • id
    作为
    number
    ,尝试发送一个数字而不是字符串,您的代码应该可以
  • id
    作为
    string
    ,删除parseInt

    var puppyID = req.params.puppy_id; 
    

  • 您正在转换为
    数字
    字符串“puppy1”。这就是您得到
    NaN
    的原因

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

  • id
    作为
    number
    ,尝试发送一个数字而不是字符串,您的代码应该可以
  • id
    作为
    string
    ,删除parseInt

    var puppyID = req.params.puppy_id; 
    

  • 什么是
    家庭id
    不应该是
    小狗id
    ?而且我也看不到你的
    。/querys.js
    文件,请确保清除inputry以删除parseInt,因为你正在传递一个字符串并试图将其转换为一个数字,返回NaN是正常的。什么是
    家庭id
    它不应该是
    小狗id
    ?而且我也看不到你的
    。/querys.js
    文件,请确保清除inputry以删除parseInt,因为你传递的是字符串,你试图将其转换为数字,返回NaN是正常的。我已编辑了问题。请查收。当我执行console.log(pupyid)时,仍然没有返回到调试的数据,它给了我NaN@codeclue刚才注意到您也在调用
    parseInt(req.params.puppy_id)
    ,但是
    puppy_id
    是一个字符串(puppy1)。我更新了上面的答案。它现在正在检测参数。但是,不执行数据库query@codeclue尝试将
    $1
    用引号括起来:
    db.any(“从puppytable中选择*,其中puppy\u id='$1',puppyID)
    我已经编辑了这个问题。请查收。当我执行console.log(pupyid)时,仍然没有返回到调试的数据,它给了我NaN@codeclue刚才注意到您也在调用
    parseInt(req.params.puppy_id)
    ,但是
    puppy_id
    是一个字符串(puppy1)。我更新了上面的答案。它现在正在检测参数。但是,不执行数据库query@codeclue尝试将
    $1
    用引号括起来:
    db.any(“从puppytable中选择*,其中puppy\u id='$1',puppyID)