【问题标题】:Why does Node.js Postgres Wiki example insert multiple records per http request?为什么 Node.js Postgres Wiki 示例在每个 http 请求中插入多条记录?
【发布时间】:2016-03-13 13:20:24
【问题描述】:

我们正在为我们的应用程序使用node-postgrespg on NPM)但遇到了问题,因此我们决定返回 Wiki 上的示例

https://github.com/brianc/node-postgres/wiki/Example

当我们运行示例时,每个 http 请求将 两条 记录插入 Postgres(“访问” ) 桌子。 这是期望的行为吗...?

我们将示例代码发布到 Heroku:https://node-postgres-example.herokuapp.com
注意:访问使用 Google Chrome

注意:我们对 Wiki 中的 server.js 代码进行了 3 处更改,以使其在 Heroku 上运行,这在 GitHub 上:https://github.com/dwyl/postgres-connection-pool-test

(我们对 server.js 所做的更改纯粹是为了 (1) 如果 visit 表不存在,则创建它,(2) 从 process.env.DATABSE_URL 获取 postgres 连接字符串和 (3 ) 收听 Heroku 上的 process.env.PORT。所有其余代码均按照 Wiki 示例进行)

【问题讨论】:

  • 在实现 HTTP 服务时,首先会想到检查请求的数量。
  • @vitaly-t 同意了。谢谢。

标签: node.js postgresql connection database-connection node-postgres


【解决方案1】:

您的客户端(浏览器)似乎提出了两个请求。如果您在命令行中使用curl,则该示例会像宣传的那样工作并返回一个连续访问计数器:

→ curl -i https://node-postgres-example.herokuapp.com/
HTTP/1.1 200 OK
Server: Cowboy
Connection: keep-alive
Content-Type: text/plain
Date: Sun, 13 Mar 2016 14:19:42 GMT
Transfer-Encoding: chunked
Via: 1.1 vegur

You are visitor number 40

→ curl -i https://node-postgres-example.herokuapp.com/
HTTP/1.1 200 OK
Server: Cowboy
Connection: keep-alive
Content-Type: text/plain
Date: Sun, 13 Mar 2016 14:20:00 GMT
Transfer-Encoding: chunked
Via: 1.1 vegur

You are visitor number 41

【讨论】:

  • 你是对的,curl 只会导致 single 插入到访问计数中。所以这可能是浏览器问题...但是有问题的浏览器是谷歌浏览器...所以我们需要深入了解它。已检查 Safari 和 Firefox 具有所需的行为。
  • 我猜您将“请求”与“访问”混淆了。
  • 这不是我的代码。我只是想运行示例代码并看到了这个问题。谢谢。你帮助我们找到了问题的根源。
【解决方案2】:

第二个请求几乎可以肯定是浏览器请求/favicon.ico,这是网络技术堆栈中的一个异常,因为它是浏览器隐式发出的请求,而在某些包含HTML 文档中没有显式引用。如果您单独处理网站图标请求,可能使用express-favicon,您将解决您的问题,并且每次页面加载仅记录 1 次访问。

【讨论】:

  • 请求!=访问。请求就是这样,就像浏览器请求网站图标一样。如果你想计算访问次数,你必须比仅仅计算请求更花哨一些。 (Cookie 等)
  • @okket 你在这里没有帮助。我完全理解 HTTP 请求是什么,不是什么。我正在向 OP 解释发生了什么。如果您发现发布的答案不足,请发布更好的答案并让社区对其进行投票。
  • 如果您将请求称为“访问”,我看不出它对 OP 有何帮助,向他展示一种解决方法,让浏览器提出完全合法的请求并将其称为“异常”。
  • 这个问题有几个方面。 http请求的定义是硬技术事件和逻辑“访问”是业务分析概念之间的区别并不是问题的唯一方面。还有一个事实是,不同的浏览器和其他 HTTP 客户端的行为不同,特别是有些会自动发出(可能是 OP 意想不到的)对 favicon 的请求,而有些则不会。所以我会告诉他发生了什么,并向他展示如何根据需要调整他的代码(从而重新定义什么是访问)。
猜你喜欢
  • 2013-11-19
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-29
  • 2021-03-27
相关资源
最近更新 更多