Node.js 400错误请求返回/favicon.ico作为express中的req.url。

Node.js 400错误请求返回/favicon.ico作为express中的req.url。,node.js,http,express,backend,http-status-code-400,Node.js,Http,Express,Backend,Http Status Code 400,我正在构建一个简单的微服务,它以unix和自然语言作为Json对象返回url日期参数。例如,如果你去 应用程序应返回:{“unix”:1431475200,“自然”:“2015年5月13日”}, %20是空格,因此您也可以写入 13, 2015 而且这个应用程序可以正常工作。 问题是当我写了一个双倍的百分比,因为我收到了一个400错误的请求错误,url变成:/favicon.ico,所以我无法按预期对url和响应应用修复,例如: 您可以在此处查看源代码: 在timeStampMicroSer

我正在构建一个简单的微服务,它以unix和自然语言作为Json对象返回url日期参数。例如,如果你去 应用程序应返回:{“unix”:1431475200,“自然”:“2015年5月13日”}, %20是空格,因此您也可以写入 13, 2015 而且这个应用程序可以正常工作。 问题是当我写了一个双倍的百分比,因为我收到了一个400错误的请求错误,url变成:/favicon.ico,所以我无法按预期对url和响应应用修复,例如:

您可以在此处查看源代码:

在timeStampMicroService.js的第22行中,我添加了一个console.log,您可以从中了解我的意思。以下是该文件的代码:

var path = require('path')
var express = require('express');
var app = express();
var fs = require('fs');
var url = require('url');
var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
  jsonResp = {},
  readableDate = "";
function Unix_timestamp(t) {
  var dt = new Date(t * 1000);
  var month = dt.getMonth();
  var day = dt.getDate();
  var year = dt.getFullYear();
  return months[month] + ' ' + day + ', ' + year;
};  
app.use(function(req, res, next) {
  console.log(req.url);
  var date = req.url.substr(1);
  var miliseconds = parseInt(date);
  var unixDate = new Date(miliseconds);
  if (unixDate == "Invalid Date") {
    var regExpr = /%20|,/;
    date = date.split(regExpr);
    var date1 = new Date(date[0] + " " + date[1] + "," + date[3]);
    if (date1 == "Invalid Date") {
      jsonResp = {
        "unix": null,
        "natural": null
      };
      res.json(jsonResp);

    } else {
      var date2 = date1.getTime();
      var timestamp = Math.floor(date2 / 1000);
      jsonResp = {
        "unix": timestamp,
        "natural": date[0] + " " + date[1] + ", " + date[3]
      };
      res.json(jsonResp);
    }
  } else {
    readableDate = Unix_timestamp(date);
    jsonResp = {
      "unix": miliseconds,
      "natural": readableDate
    };

    res.json(jsonResp);
  }
});
app.listen(process.env.PORT, function() {
  console.log('Node.js listening ...');
});

有人能帮我解决这个问题吗?

这可能是因为服务器试图解码百分比编码字符并发现格式错误-您将一个
%%
放在另一个字符后面,但百分比编码字符如下所示:
%HH
,其中H是十六进制数字,请检查:

因此,即使在你的应用程序获取url之前,这个错误也必须发生。只是不要试图传递这样的url。如果要创建包含百分比字符的url,请使用
%25
,如下所示:


如果您想处理此类URI,您可能需要实现自己的HTTP服务器(HTTP请求处理程序)。

您好,谢谢您的回答。我发现,当使用glitch作为免费服务器时,它会在事件到达应用程序之前抛出错误,所以正如您所说,我无法使用中间件末尾的catch(e)来处理它。