URL 中的问号已随 Express Route Parameters 一起删除。我怎样才能得到带有问号的标题 post? (节点.js/Express/MongoDB)
Question mark in URL is removed with Express Route Parameters. How can I get a post by title with a question mark? (Node.js/Express/MongoDB)
我试图通过标题查找和检索 post 但它失败了,当我控制台日志 requestedTitle = req.params.postTitle
它显示?从http://localhost:1035/posts/Is%20Google%20Analytics%20is%20中删除非法?只是“Is Google Analytics is illegal”找不到标题为“Is Google Analytics is illegal?”的文章有一个?。
app.get('/posts/:postTitle', function (req, res) {
//single blog post
// const postId = req.params.postId
const requestedTitle = req.params.postTitle
Post.findOne({title: requestedTitle}, function (err, post) {
console.log(requestedTitle);
if (post) {res.render('post', {
singleTitle: post.title,
singleContent: post.content,
singleAuthor: post.author,
uploadedImg: post.img,
postCreated: post.created_at
})} else {
res.send(`No "${requestedTitle}" article was found.`)
}
Express(根据 http 规范)将问号解释为 URL 查询字符串的定界符。因此,Express 已经解析出查询字符串并且与您的路由不匹配。解析后的查询字符串将在 req.query
.
因此,如果您发送 URL 请求,例如:
http://localhost:1035/posts/Is%20Google%20Analytics%20is%20illegal?
然后,?
将被视为查询字符串的分隔符,您的 postTitle 将只是 Is Google Analytics is illegal
.
如果您希望问号成为您在 postTitle
中获得的内容的一部分,则客户端必须在构造 [=] 之前使用 encodeURIComponent()
正确编码 postTitle
35=]。这将从 Express 中“隐藏”?
(它将被编码为 %3F
,然后它将作为 ?
的解码值保留在 postTitle
中。
仅供参考,还有许多其他字符也被保留,所以任何 end-user 您想要放入 URL 的内容必须是 postTitle
在构造 URL 时用 encodeURIComponent()
编码。请注意,您不会在整个 URL 上调用 encodeURIComponent()
,而只是在成为 postTitle 的那部分用户数据上调用。然后 Express 将为您处理解码。
我试图通过标题查找和检索 post 但它失败了,当我控制台日志 requestedTitle = req.params.postTitle
它显示?从http://localhost:1035/posts/Is%20Google%20Analytics%20is%20中删除非法?只是“Is Google Analytics is illegal”找不到标题为“Is Google Analytics is illegal?”的文章有一个?。
app.get('/posts/:postTitle', function (req, res) {
//single blog post
// const postId = req.params.postId
const requestedTitle = req.params.postTitle
Post.findOne({title: requestedTitle}, function (err, post) {
console.log(requestedTitle);
if (post) {res.render('post', {
singleTitle: post.title,
singleContent: post.content,
singleAuthor: post.author,
uploadedImg: post.img,
postCreated: post.created_at
})} else {
res.send(`No "${requestedTitle}" article was found.`)
}
Express(根据 http 规范)将问号解释为 URL 查询字符串的定界符。因此,Express 已经解析出查询字符串并且与您的路由不匹配。解析后的查询字符串将在 req.query
.
因此,如果您发送 URL 请求,例如:
http://localhost:1035/posts/Is%20Google%20Analytics%20is%20illegal?
然后,?
将被视为查询字符串的分隔符,您的 postTitle 将只是 Is Google Analytics is illegal
.
如果您希望问号成为您在 postTitle
中获得的内容的一部分,则客户端必须在构造 [=] 之前使用 encodeURIComponent()
正确编码 postTitle
35=]。这将从 Express 中“隐藏”?
(它将被编码为 %3F
,然后它将作为 ?
的解码值保留在 postTitle
中。
仅供参考,还有许多其他字符也被保留,所以任何 end-user 您想要放入 URL 的内容必须是 postTitle
在构造 URL 时用 encodeURIComponent()
编码。请注意,您不会在整个 URL 上调用 encodeURIComponent()
,而只是在成为 postTitle 的那部分用户数据上调用。然后 Express 将为您处理解码。