NodeJs - TypeError: Cannot read property 'url' of null, but the app is working fine

NodeJs - TypeError: Cannot read property 'url' of null, but the app is working fine

更新:我会检查 /:slug,即使我走不同的路线,我认为这就是问题所在。

我正在尝试使用 Nodejs、Expressjs、MongoDB 和 EJS 创建一个 URL 缩短器。

即使我的应用程序运行良好,我仍然在终端中收到此错误:

我的路线:

const express = require("express");
const URLs = require("../models/urls");
const { findById, find } = require("../models/urls");
const router = express.Router();

router.get("/", (req, res) => {
  res.render("index", { shortUrl: new URLs() });
});

router.post("/redirect", (req, res) => {
  let url = req.body.url;
  let slug = req.body.slug;
  let shortenUrl = new URLs({
    url: url,
    slug: slug,
  });
  shortenUrl.save();
  res.render("shortenUrl", { shortenUrl });
});

router.get("/about", (req, res) => {
  res.render("about");
});

router.get("/contact", (req, res) => {
  res.render("contact");
});

router.get("/all", async (req, res) => {
  try {
    var shortUrls = await URLs.find({});
    res.render("all", { shortUrls });
  } catch (error) {
    console.log(error);
  }
});

//:TODO
router.get("/:slug", async (req, res) => {
  var shortUrl = await URLs.findOne({ slug: req.params.slug }).exec();
  try {
    console.log(shortUrl);
    var urls = await shortUrl.url;
    if (urls.includes("http", 0)) {
      return res.redirect(urls);
    } else {
      return res.redirect(`http://${urls}`);
    }
  } catch (error) {
    console.log(error);
  }
});

module.exports = router;

在为应用程序(在单独的路由文件中)创建 API 之前,我没有收到此错误。 同样在我的服务器中,我正在使用:

app.use(bodyParser.urlencoded({ extended: false }));

并使用:

app.use(express.json());

也无济于事。

任何帮助将不胜感激,谢谢 c:

我在路由中添加了一个 if 语句并解决了问题,感谢@Pukka c:

router.get("/:slug", async (req, res) => {
  var shortUrl = await URLs.findOne({ slug: req.params.slug }).exec();
  if (shortUrl) {
    try {
      console.log(shortUrl);
      var urls = await shortUrl.url;
      if (urls.includes("http", 0)) {
        return res.redirect(urls);
      } else {
        return res.redirect(`http://${urls}`);
      }
    } catch (error) {
      console.log(error);
    }
  }