Expressjs随机挂起,如何输出错误?

3

这是在我本地MacOSX上构建的一个nodejs / express 4应用程序中的情景。

这是一个简单的应用程序,主要使用postgresql(以原生形式)来呈现页面。

当我浏览我的页面、登录、注销时......在某个时候,应用程序会随机挂起:浏览器停留在加载一个空白页面上。控制台上没有输出错误。当路由挂起时,我无法再访问它,但我可以访问其他路由。由于问题的出现是完全随机的,因此很难找到问题的来源。

是否有一种粗暴的方式可以确定导致此问题的原因?我至少能够找到一种读取错误的方法。

更新1:

  • 它在我访问的第11个路由处 SYSTEMATICALLY 发生?!!!所以如果我打开相同的链接11次,它将在第11次挂起。可能是一个pg问题吗?
  • 这不是session中间件或我认为不是:即使我禁用它,它仍然会发生。

这是我的app.js入口文件:

import * as express from "express"
import * as exphbs from "express-handlebars"
import directory from "./source/apps/directory/directory_controller"
import users from "./source/apps/users/users_controller"
import * as session from "express-session"


// Non require variables
let app = express()
let port = process.env.PORT || 3002
import * as forms from "formidable"


app.use( session( { secret: 'keyboard cat' }))


app.use(function(req, res, next){
        res.locals.session = req.session
        next()
})


function logErrors(err, req, res, next) {
  console.error("middleware", err.stack )
  console.log("middleware", err)
  next(err)
}

app.use(logErrors)

/** Routes */
app.use( "/directory", directory )
app.use( "/users", users )

/** Views */
app.set( "views", __dirname + "/source/" )
app.engine( 'handlebars', exphbs( {
  defaultLayout: __dirname + "/source/views/layouts/main",
  partialsDir: "./source/apps/directory/views/partials/"
}) )
app.set( "view engine", "handlebars" )


// app.use(express.static(__dirname + '/public'));
app.listen( port, function () {
  console.log( "Server is listening on port:" + port )
})
1个回答

1
确实,这是一个postgress客户端实例问题。
1)我改用了客户端池而非客户端实例。似乎在之前的代码中,每次加载页面时都会创建一个新的数据库实例并耗尽默认的10个实例;这解释了为什么无法加载第11个页面。
2)我确保使用 done() 关闭我的连接(非常重要),就像文档中的示例一样:https://github.com/brianc/node-postgres 我很惊讶没有收到任何有关此问题的错误消息。我本可以花费几个小时来解决它。

你使用 pg-promise 就不会遇到这些问题了 ;) - vitaly-t

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接