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);
}
}
更新:我会检查 /: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);
}
}