【问题标题】:URL query in express js with postgresql使用 postgresql 在 express js 中进行 URL 查询
【发布时间】:2021-12-21 07:33:02
【问题描述】:

我试图通过 url 从我的数据库中进行查询,但响应只返回我所有的人。

exports.getPersonByName = async (req, res) => {
const query = req.query.q
try{
    const person = await pool.query('SELECT * FROM person WHERE firstname LIKE $1', [query])
    res.status(200).json(person)
} catch(error) {
    res.status(500).json({ message: error.message })
}

}

【问题讨论】:

  • 你确定console.log(query) 打印一个非空字符串吗?
  • 当我在 try 块之前和之前尝试 console.log 时,控制台中什么都没有出现...
  • 这是因为查询返回了所有人。您应该确保您的q 查询参数正确传递和接收。
  • 在路由器中我有 /person,在 url 中我输入 /person?q=Tim。这是错的吗?
  • 请求看起来没问题。您可以发布您的主要 Express 应用程序文件吗? (app.js 或 index.js)

标签: javascript sql postgresql express


【解决方案1】:

您的实现存在两个问题。

  1. 您在server.js 文件中缺少urlencoded 中间件(在app.use(express.json()) 行之后添加):
app.use(express.urlencoded({ extended: true }));
  1. 您还没有为person.route.js 中的getPersonByName 方法配置路由。 您无需在路由本身中指定查询参数。 目前,GET /person 路由被 getAllPersons 函数使用,因此您有两种选择:​​i>
  • getAllPersonsgetPersonByName函数统一在同一路径GET /person下,如果存在则取回参数。

您将只保留 getAllPersons 路由和函数并在其中处理 q 参数

exports.getAllPersons = async (req, res) => {
  const query = req.query.q || '';
  try {
    const person = await pool.query(
      'SELECT * FROM person WHERE firstname LIKE $1',
      [query]
    );
    res.status(200).json(person);
  } catch (error) {
    res.status(500).json({ message: error.message });
  }
};
  • getPersonByName 定义不同的路由,例如:
router.get('/byname', controller.getPersonByName)

并将您的请求发送到 /person/byname?q=Example(保持 getPersonByNamegetAllPersons 方法的定义)

【讨论】:

  • 谢谢!成功了!
猜你喜欢
  • 2017-03-31
  • 2013-02-01
  • 2013-12-20
  • 1970-01-01
  • 2019-04-17
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多