Express / Node.js页面刷新问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Express / Node.js页面刷新问题相关的知识,希望对你有一定的参考价值。

我是与服务器进行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));
        }
    };
});

感谢任何指针:)

答案

因此,问题很可能是从DB请求返回的错误,抛出错误(特别是在异步回调中)将不会执行任何操作,因此无法传播,因此无法处理,这意味着任何待处理的请求都将简单一直挂到他们最终超时。

处理此问题的最佳方法是调用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
    });
  });
});

以上是关于Express / Node.js页面刷新问题的主要内容,如果未能解决你的问题,请参考以下文章

Node.js刷新session过期时间

Browsersync结合gulp和nodemon实现express全栈自动刷新

Node.js - 提交表单

Node.js/Express - 找不到页面时呈现错误

Node.js Socket.io 页面刷新多个连接

Node.js 实战之—优化汇总