Node.js 400错误请求返回/favicon.ico作为express中的req.url。
我正在构建一个简单的微服务,它以unix和自然语言作为Json对象返回url日期参数。例如,如果你去 应用程序应返回:{“unix”:1431475200,“自然”:“2015年5月13日”}, %20是空格,因此您也可以写入 13, 2015 而且这个应用程序可以正常工作。 问题是当我写了一个双倍的百分比,因为我收到了一个400错误的请求错误,url变成:/favicon.ico,所以我无法按预期对url和响应应用修复,例如: 您可以在此处查看源代码: 在timeStampMicroService.js的第22行中,我添加了一个console.log,您可以从中了解我的意思。以下是该文件的代码: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
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)来处理它。