从路由器获取变量时 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')
  }
})

注意:这是未经测试的