【发布时间】:2021-06-02 13:22:57
【问题描述】:
尝试创建一个搜索功能,该功能将搜索数据库并返回任何“类似”字符串的结果。当我使用 SQL 调用数据库时,它工作正常,但是当我尝试使用 knex 调用时,我得到 0 个结果,或者无论我将字符串更改为什么结果都是相同的。
sql(工作)
SELECT * FROM stockList WHERE symbol LIKE '%AAPL%' AND sec_type = 'stock';
我正在使用 req.params 来调用 knex 函数。可以更改的两件事是“sec_type”和“symbol”
路线
app.get('/api/getStockList/:nameType/:queryParams', requireLogin, async (req, res, next) => {
const {nameType, queryParams} = req.params;
//Call Search Function
const searchData = await Search.searchSymbols(nameType, queryParams);
res.send(searchData)
})
knex函数
//Connect to Database
const knex = require('knex')({
client: 'mysql',
connection: {
host: 'localhost',
user: 'admin',
password: keys.MysqlPassword,
database: 'csv_stock_data',
},
});
//Create knex function
exports.searchSymbols = async (search = '', sec_type) => {
console.log(search + sec_type)
//If No type selected Default is All
if (sec_type === 'All') {
const results = await knex('stockList')
.select({
symbol: 'symbol',
displaySymbol: 'displaySymbol',
description: 'description',
sec_type: 'sec_type',
})
.where('symbol', 'like', `%${search.toUpperCase()}%`)
// .orWhere('description', 'like', `%${search}%`);
console.log(results)
return results.map((row) => {
return row;
});
} else {
//else return data by type
const results = await knex('stockList')
.select({
symbol: 'symbol',
displaySymbol: 'displaySymbol',
description: 'description',
sec_type: 'sec_type',
})
.where('sec_type', sec_type)
.where('symbol', 'like', `%${search.toUpperCase()}%`)
// .orWhere('description', 'like', `%${search.toUpperCase()}%`);
return results.map((row) => {
return row;
});
}
};
【问题讨论】:
-
使用
DEBUG=knex:*环境变量集运行您的应用程序,您将看到发送的查询是否真的是您认为的那样。