【问题标题】:My API endpoint is not returning the expected output我的 API 端点没有返回预期的输出
【发布时间】:2019-08-19 13:43:28
【问题描述】:

我用 Express JS 编写了一个后端应用程序,通过来自 API 端点的 GET 请求从数据库中检索信息。我用来从 API 端点获取的查询正在数据库中工作,但我无法在 Web 浏览器中获取与使用 Express JS 的响应相同的详细信息。尽我所能找出问题所在,但我找不到。

我试图检查我的查询是否有问题,但查询正在获取正确的详细信息,但我无法在网络浏览器中得到任何响应。

这是我认为我有错误的代码:

      const { rows } = await pool.query(
                'SELECT  branches.ifsc, branches.bank_id, branches.branch, branches.address, branches.city, branches.district, branches.state FROM branches WHERE branches.branch LIKE $1% LIMIT $2 OFFSET $3' ,

        [q, limit, offset]
      );

      res.send(rows[0]);
    });

用于获取详细信息的 SQL 查询:

    SELECT branches.ifsc, branches.bank_id, branches.branch, branches.address, branches.city, branches.district, branches.state FROM branches WHERE branches.branch LIKE '%RTGS%' ORDER BY branches.ifsc LIMIT 3;

错误日志:

Server is running on 7000
(node:19484) UnhandledPromiseRejectionWarning: error: syntax error at or near "LIMIT"
    at Connection.parseE (/home/kiddo/Desktop/backend/node_modules/pg/lib/connection.js:604:11)
    at Connection.parseMessage (/home/kiddo/Desktop/backend/node_modules/pg/lib/connection.js:401:19)
    at Socket.<anonymous> (/home/kiddo/Desktop/backend/node_modules/pg/lib/connection.js:121:22)
    at Socket.emit (events.js:200:13)
    at addChunk (_stream_readable.js:294:12)
    at readableAddChunk (_stream_readable.js:275:11)
    at Socket.Readable.push (_stream_readable.js:210:10)
    at TCP.onStreamRead (internal/stream_base_commons.js:166:17)
(node:19484) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:19484) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

【问题讨论】:

  • 嘿,你得到什么回应?您可以尝试添加 console.log(rows);查看结果中的内容
  • 我没有收到来自服务器的任何响应。它是一个空数组
  • console.log(rows) 在您的查询之后显示什么? console.log(rows[0]) 在你的 res.send(rows[0]) 之前显示了什么?而且,您应该在您的await 周围添加一个try/catch,这样您就可以捕获并记录错误,并且至少在遇到错误时执行res.sendStatus(500)。你运行的是什么版本的 Express?
  • undefined 到底是什么?不可能console.log(rows) 显示undefined,但console.log(rows[0]) 是一个空数组。那是不可能的。在向我们提供信息时,您需要更加具体。我在之前的评论中向您询问了两条信息,但仍然不知道其中任何一条的答案。
  • 好的,所以您的const { rows } = await pool.query(...) 正在引发异常并且您没有得到查询结果。希望了解您的数据库的人可以帮助您找出原因。您还需要在 await 语句周围使用 try/catch,以便您处理自己的错误。

标签: javascript node.js postgresql api express


【解决方案1】:

我怀疑使用 $1% 会导致您的 sql 语句出现问题。请尝试以下方法。

const { rows } = await pool.query(
        'SELECT  branches.ifsc, branches.bank_id, branches.branch, branches.address, branches.city, branches.district, branches.state FROM branches WHERE branches.branch LIKE $1 LIMIT $2 OFFSET $3' ,
['%'+q+'%', limit, offset]);

【讨论】:

  • 谢谢麦迪。这件小事 搞砸了我一整天。感谢您的帮助。
  • @Sravan.k 如果此答案对您有所帮助,请接受此答案,以便其他人将来可以直接使用。谢谢。
【解决方案2】:

尝试使用回调函数。

con.query("YOUR SQL QUERY HERE", function (err, result, fields) {
    if (err) throw err;
    console.log(result);
  });

参数替换示例

     var sql = "SELECT * FROM table WHERE field1 = ? AND field2 >= ?";
connection.query(sql, [value1, value2], function(err, result, fields) {
    //do your operations HERE
    console.log(result);

});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 2016-05-24
    • 1970-01-01
    相关资源
    最近更新 更多