javascript - 用于获取与参数匹配的所有 SQLite 元素的 Express API 返回未定义
问题描述
我有许多 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));
});
});
};
网址截图
解决方案
我认为问题是如何传递参数。如果我将 SQL 语句硬编码为'SELECT * FROM tile WHERE card_id = 26'
而不是'SELECT * FROM tile WHERE card_id = $cardId'
,则该过程有效。我要弄清楚我在参数值上做错了什么,现在我知道 SQL 语句和 API 确实在工作。
推荐阅读
- python - 如何将 ms 中的时间戳转换为 YY-MM-DD 格式?
- c++ - 我可以在 C++ 的子类中将父的 const 成员转换为非常量吗?
- flutter - 输入'未来
' 不是类型 'FutureOr 的子类型 ' 在尝试在颤动中检索蓝牙状态时进行类型转换 - javascript - 输入类型文件未在 IOS Safari 中在 navigation.getCurrentLocations 成功回调中打开
- reactjs - React 将状态值发送到另一个组件
- reactjs - 在 React 中渲染长选择时出现巨大的冻结
- python - 处理大型数据集时 IPython 内核重新启动
- java - 为什么我不能重载这个方法?
- vue.js - 带有 v-model 的 Vue 输入字段不会在挂载时更新
- c# - 错误 json 的自定义错误响应。Dotnet 核心 Web API