Javascript 如何强制Express.js生成具有特殊字符的参数?

Javascript 如何强制Express.js生成具有特殊字符的参数?,javascript,api,express,http,parameters,Javascript,Api,Express,Http,Parameters,我正在尝试完成freeCodeCamp“API和微服务”课程中的一个简单项目 该项目相当简单,需要使用Express.js,提供了一些路由,其他路由必须动态生成。在本例中,可以将字符串或数字解析为newdate()object。e、 g: 1451001600000,这是以毫秒为单位的有效UNIX时间 2016-12-25,有效期 05%201010%202011也是有效的 最后一个问题让我陷入困境,每次都会导致响应失败。 事实上,它在Date()对象中被认为是有效的。但是,结果日期是错误的

我正在尝试完成freeCodeCamp“API和微服务”课程中的一个简单项目

该项目相当简单,需要使用Express.js,提供了一些路由,其他路由必须动态生成。在本例中,可以将字符串或数字解析为
newdate()
object。e、 g:

  • 1451001600000,这是以毫秒为单位的有效UNIX时间
  • 2016-12-25,有效期
  • 05%201010%202011也是有效的
最后一个问题让我陷入困境,每次都会导致响应失败。 事实上,它在Date()对象中被认为是有效的。但是,结果日期是错误的,因为Express.js显然会解析或传递没有特殊字符的参数

因此,
05%20October%202011
将以
2011年10月05日
的身份注销

我已经查看了Express.js文档和其他有关MDN的内容。 显然,我已经找到了几种使用
query
对象实现这一点的方法,但没有使用
params
对象

我还尝试提供可以缓解问题的中间件,但问题来自Express API本身,提供URL解析中间件将没有用处,因为并非所有请求都使用特殊字符发送

有人知道如何防止Express.js去掉特殊字符并按原样传递URL参数吗

请记住,路由是由FFC服务器随意检查的,因此不可能对输入本身进行操作


非常感谢。

我想你误解了任务:)

在现代浏览器中键入URL的任何内容都将通过
encodeURIComponent
传递。例如,如果您转到
https://httpbin.org/get?data=one 两三个
,浏览器将发出一个请求,如
GET/GET?data=1%2022%20three HTTP/2
(请注意,当您检查请求头时,浏览器可能会自动将
%20
转换为空格,在Firefox中,您可以使用“原始打开头”选项卡)。

这样做的原因是,您可以将
this/is/not/a/route
this&is=not&a=param
等文本作为参数发送,而无需将它们解析为路径或查询参数

通常,express会为您自动解码,以便您看到
req.params.data='一两三'
。没有理由反对这种行为。现在,如果你真的想找回你的百分比,你可以使用

const encoded=encodeURIComponent(请求参数数据);
console.log(编码);/'1%202%203'
例如,express可能会自动将
05%20October%202011
解码为
05 October 2011
,然后您可以像
新日期(MyAutomaticallyCodedParam)
一样使用它

如果改为将
05%2520十月%25202011
发送到服务器,它将被解码为
05%20十月%202011
。看起来Node将获得第一个数字作为,第一个单词作为,月份后的前四位数字作为,对于<代码>2011年10月,这将导致2020年


如果仍不清楚,请添加更多上下文或询问:)

url中发送到服务器的内容应为url编码。如果希望参数为“2011年10月5日”,则发送“2011年10月05日20日20日20日20日”。如果希望参数为“05%20October%202011”,则必须发送编码的url百分比,即发送“05%2520October%25202011”。谢谢,但正如我在问题底部所说,FCC服务器会发出随机请求,因此我无法控制输入。无论如何,似乎是Date()对象如何解析05%20October%202011的问题。出于某种原因,Date()对象将其视为2020年10月5日,而URL显然是2011年10月5日。您完全正确。首先,因为这是一个测试,所以调试非常困难,因为您得到的不是失败就是通过了。因此,试图理解问题是什么(日期或解析)是一个挑战。其次,问题不是来自URL解析,而是来自Date对象将05%20October%202011视为有效日期的方式。我并不是说这是错误的解析或是一个bug,但它只是不同于URL标准解码,这可能会产生一些混乱。无论如何,我想我学到了一些新东西。非常感谢你的回答。