Express / Node.js页面刷新问题

时间:2018-12-12 23:10:45

标签: javascript node.js express web server

我是与服务器上的Web开发相关的初学者(仅参加uni课程中的一门课程)。我有一个与GET请求有关的怪异问题,如果我刷新太多次,它将停止发送。这是npm start正常运行时的输出:

GET / 304 0.350 ms - -
GET /stylesheets/styles.css 404 28.359 ms - 1132
GET /javascripts/scripts.js 304 0.244 ms - -
GET /favicon.ico 404 11.692 ms - 1132
GET /skaterSummary.json 304 51.770 ms - -

大量垃圾邮件刷新后,输出如下:

GET /skaterSummary.json - - ms - -
GET / 304 0.676 ms - -
GET /stylesheets/styles.css 404 28.628 ms - 1132
GET /javascripts/scripts.js 304 0.599 ms - -
GET /favicon.ico 404 20.098 ms - 1132

代码:routes / index.js

// Database Testing
router.get('/skaterSummary.json', function(req, res, next) {
    req.pool.getConnection(function(err, connection) {
        if (err) throw err;
        var query = "SELECT * from Summary;";
        connection.query(query, function(err, results) {
            res.json(results); // send response
        });
    });
});

代码:scripts.js

$(document).ready(function() {
    'use strict';

    let xhttp = new XMLHttpRequest();

    xhttp.open('GET', 'skaterSummary.json', true);
    xhttp.setRequestHeader('Content-type', 'application/json');
    xhttp.send();

    xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            console.log("Success");
            console.log(JSON.parse(xhttp.responseText));
        }
    };
});

感谢任何指针:)

1 个答案:

答案 0 :(得分:0)

因此,问题很可能是来自任何一个数据库请求的错误,抛出错误(尤其是在异步回调中)将无济于事,不会传播,因此无法处理,这意味着任何未决请求将一直挂起,直到最终超时。

处理此问题的最佳方法是调用next并将错误传递给Express,然后可以添加自己的自定义错误处理程序或利用Express中的默认错误处理程序

router.get('/skaterSummary.json', function(req, res, next) {
  req.pool.getConnection(function(err, connection) {
    if (err) {
      console.error(err); // log the DB error internally
      return next(new Error('Server Error')); // return a client error
    }

    var query = "SELECT * from Summary;";
    connection.query(query, function(err, results) {
      if (err) { 
        console.error(err);
        return next(new Error('Server Error')); 
      }

      res.json(results); // send response
    });
  });
});