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



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

我连接到数据库没有问题。但是,它显示没有返回任何数据。我认为,我在执行查询时做错了什么。

我的代码:-

索引.js

var express = require('express');
var router = express.Router();
var db = require('../queries');
router.get('/api/puppies/:puppy_id', db.getPuppyStatus);
module.exports = router;

查询.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

应该推荐什么方法?

我看不出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);
});
}

您正在转换为numberstring"puppy1"。这就是你得到NaN的原因。

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

  1. idnumber,尝试发送一个数字而不是字符串,你的代码应该没问题。
  2. idstring,删除 parseInt。

    var puppyID = req.params.puppy_id; 
    

最新更新