我有许多API可以正常工作,并且可以毫无问题地获取和发布。但是,当我尝试基于参数获取所有记录时,我未定义为响应。更令人沮丧的是,如果我在浏览器中输入搜索字符串,就会得到预期的响应。
API代码段
tilesRouter.param('cardId', (req, res, next, cardId) => {
console.log('cardId: ', cardId);
const sql = 'SELECT * FROM tile WHERE card_id = $cardId';
const values = {$cardId: cardId};
console.log('param sql: ', sql);
console.log('param values: ', values);
db.all(sql, values, (error, tile) => {
if (error) {
next(error);
} else if (tile) {
console.log('param req:tile: ', req.tile);
req.tile = tile;
next();
} else {
res.sendStatus(404);
}
});
});
tilesRouter.get('/:cardId', (req, res, next) => {
res.status(200).json({tile: req.tile});
});
实用代码段
Bingo.getTiles = card_id => {
const url = `${baseUrl}/tiles/${card_id}`;
return fetch(url).then(response => {
if (!response.ok) {
return new Promise(resolve => resolve([]));
}
return response.json().then(jsonResponse => {
console.log('jsonResponse: ', jsonResponse); // empty
return jsonResponse.tiles.map(tile => camelcaseKeys(tile));
});
});
};
URL屏幕截图
答案 0 :(得分:0)
我认为问题在于如何传递参数。如果我将SQL语句硬编码为'SELECT * FROM tile WHERE card_id = 26'
而不是'SELECT * FROM tile WHERE card_id = $cardId'
,则该过程有效。现在,我知道SQL语句和API实际上正在工作,我将弄清楚参数值在做什么。
答案 1 :(得分:0)
似乎您的代码中的字符串文字模板有问题。我相信您想根据cardId值搜索图块。
tilesRouter.param('cardId', (req, res, next, cardId) => {
console.log('cardId: ', cardId);
const sql = 'SELECT * FROM tile WHERE card_id = $cardId';
因此要注入cardId变量,您必须使用模板文字:
const sql = `SELECT * FROM tile WHERE card_id = ${cardId}`;
注意区别:
$
符号和大括号{}
了解更多here。