You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

全栈开发求助:实现欧洲首都多字段搜索过滤功能

求助:欧洲首都全栈MVP的多字段搜索过滤实现问题

我是一名Web开发新手,目前正在开发一个关于欧洲首都的全栈MVP。在展示所有首都的主页面中,我希望添加一个搜索栏,支持同时按多个字段(首都名称、所属国家或使用语言)进行过滤。以下是我index.js中当前的代码(无法正常运行):

/* GET capitals by name, country or language */
router.get(`?${dynamicKey}=${dynamicValue}`, async (req, res) => {
  const { dynamicKey } = req.params;
  const { dynamicValue } = req.query;

  try {
    const results = await db(`SELECT * FROM capital WHERE ${dynamicKey} LIKE "%${dynamicValue}%";`);
    res.send(results.data);
  } catch (error) {
    res.status(500).send(error);
  }
});

当在搜索栏输入内容(可为首都名、国家或语言)时,预期结果是所有符合该值的首都列表。按首都名或国家搜索时,列表通常只有一项;按语言搜索时,可能返回多个结果,例如搜索“german”应返回柏林、维也纳、卢森堡等,搜索“spanish”仅返回马德里。

更新:
感谢所有提供帮助的人!以下是我最终使用的可正常运行代码,供未来有需要的人参考:

/* GET all capitals or filtering */
router.get("/capitals", async (req, res) => {
  if (!req.query.search) {
    console.log(req.query);
    try {
      const results = await db("SELECT * FROM capital ORDER BY id ASC;");
      res.send(results.data);
    } catch (error) {
      res.status(500).send(error);
    }
  } else {
    const search = req.query.search;
    console.log("SQL Query:", search);
  
    try {
      const query = `SELECT * FROM capital WHERE name LIKE "%${search}%" OR country LIKE "%${search}%" OR language LIKE "%${search}%" OR currency LIKE "%${search}%";`;
      const searchParam = `%${search}%`;
      const results = await db(query, [searchParam, searchParam, searchParam, searchParam]);
      res.send(results.data);
    } catch (error) {
      res.status(500).send(error);
    } 
  }
});

内容的提问来源于stack exchange,提问作者Maria Gimenez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 23:43:22