从路由器获取变量时 returns requestProvider.js.map in node.js
When getting variable from router it returns requestProvider.js.map in node.js
我有一个 node.js 应用程序。当网页第一次呈现时,一切都按预期工作,但在检查应用程序崩溃时,req.params.slug 显示为 requestProvider.js.map。
router.get('/:slug', async (req, res) => {
const article = await Article.findOne({ slug: req.params.slug })
if (article == null){
res.render('/')
}
res.render('articles/show', { article: article })
})
编辑
有 Console.Log 条消息
router.get('/:slug', async (req, res) => {
console.log("slug")
console.log(req.params)
const article = await Article.findOne({ slug: req.params.slug })
console.log("article")
console.log(article)
if (article == null){
res.render('/')
}
console.log("article")
console.log(article)
console.log("title")
console.log(article.title)
res.render('articles/show', { article: article })
})
控制台消息是
鼻涕虫
{ 塞子:'requestProvider.js.map' }
文章
无效的
文章
无效的
标题
C:\Users\samue\OneDrive\Desktop\shortcuts 和 unused\Unused 2\Blog\public\routes\articles.js:32
console.log(article.title)
^
TypeError: 无法读取 null 的属性(读取 'title')
在 C:\Users\samue\OneDrive\Desktop\shortcuts 和 unused\Unused 2\Blog\public\routes\articles.js:32:23
在 processTicksAndRejections(节点:internal/process/task_queues:96:5)
[nodemon] 应用程序崩溃 - 在启动之前等待文件更改...
您面临的问题是您对 article 的空检查实际上并没有结束函数进程,因此稍后当您调用 article.title 时它会抛出未定义。您可以通过在响应前面添加 return 来解决此问题。
if (article == null) return res.render('/')
或使用可选链接
console.log(article?.title)
总体而言,您应该尝试重构端点,我建议:
router.get('/:slug', async (req, res) => {
const { slug } = req.params // destructure slug from params
if (!slug) return res.render('/') // check if provided
try {
const article = await Article.findOne({ slug })
return res.render('articles/show', { article })
} catch(err) {
res.status(400) // or some other error repsonse
return res.render('your error page')
}
})
注意:这是未经测试的
我有一个 node.js 应用程序。当网页第一次呈现时,一切都按预期工作,但在检查应用程序崩溃时,req.params.slug 显示为 requestProvider.js.map。
router.get('/:slug', async (req, res) => {
const article = await Article.findOne({ slug: req.params.slug })
if (article == null){
res.render('/')
}
res.render('articles/show', { article: article })
})
编辑 有 Console.Log 条消息
router.get('/:slug', async (req, res) => {
console.log("slug")
console.log(req.params)
const article = await Article.findOne({ slug: req.params.slug })
console.log("article")
console.log(article)
if (article == null){
res.render('/')
}
console.log("article")
console.log(article)
console.log("title")
console.log(article.title)
res.render('articles/show', { article: article })
})
控制台消息是
鼻涕虫 { 塞子:'requestProvider.js.map' } 文章 无效的 文章 无效的 标题 C:\Users\samue\OneDrive\Desktop\shortcuts 和 unused\Unused 2\Blog\public\routes\articles.js:32 console.log(article.title) ^
TypeError: 无法读取 null 的属性(读取 'title') 在 C:\Users\samue\OneDrive\Desktop\shortcuts 和 unused\Unused 2\Blog\public\routes\articles.js:32:23 在 processTicksAndRejections(节点:internal/process/task_queues:96:5) [nodemon] 应用程序崩溃 - 在启动之前等待文件更改...
您面临的问题是您对 article 的空检查实际上并没有结束函数进程,因此稍后当您调用 article.title 时它会抛出未定义。您可以通过在响应前面添加 return 来解决此问题。
if (article == null) return res.render('/')
或使用可选链接
console.log(article?.title)
总体而言,您应该尝试重构端点,我建议:
router.get('/:slug', async (req, res) => {
const { slug } = req.params // destructure slug from params
if (!slug) return res.render('/') // check if provided
try {
const article = await Article.findOne({ slug })
return res.render('articles/show', { article })
} catch(err) {
res.status(400) // or some other error repsonse
return res.render('your error page')
}
})
注意:这是未经测试的