我正在尝试将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
推荐的方法是什么?
答案 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
是什么类型。
您有两种选择:
id
为number
,请尝试发送数字而不是字符串,并且您的代码应该没问题。
id
和string
一样,删除parseInt。
var puppyID = req.params.puppy_id;