>我正在尝试将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);
});
}
您正在转换为number
string
"puppy1"。这就是你得到NaN
的原因。
我不知道您专栏中id
的类型是什么。 您有两种选择:
id
number
,尝试发送一个数字而不是字符串,你的代码应该没问题。-
id
string
,删除 parseInt。var puppyID = req.params.puppy_id;