Node.js NodeJs路由不渲染
我正在构建一个Express应用程序,但在路由方面遇到了一些问题。 这是我的routes.jsNode.js NodeJs路由不渲染,node.js,express,path,routes,Node.js,Express,Path,Routes,我正在构建一个Express应用程序,但在路由方面遇到了一些问题。 这是我的routes.js const EDIT_VIDEO = "/edit"; const routes = { editVideo: (id) => { if (id) { return `videos/${id}/edit`; } else { return EDIT_VIDEO; } }, deleteVideo: DELETE_VIDEO, }; e
const EDIT_VIDEO = "/edit";
const routes = {
editVideo: (id) => {
if (id) {
return `videos/${id}/edit`;
} else {
return EDIT_VIDEO;
}
},
deleteVideo: DELETE_VIDEO,
};
export default routes;
这是我的视频控制器:
import Video from "../models/Video";
import routes from "../routes";
export const getEditVideo = async (req, res) => {
const {
params: { id },
} = req;
try
const video = await Video.findById(id);
res.render("editVideo", { pageTitle: `Edit ${video.title}`, video });
} catch (error) {
console.log(error);
res.redirect(routes.home);
}
};
export const postEditVideo = (req, res) => {};
这是我的视频路由器:
import express from "express";
import routes from "../routes";
import {
getEditVideo,
postEditVideo,
} from "../controllers/videoController";
const videoRouter = express.Router();
/*------Video Routes------*/
//Edit
videoRouter.get(routes.editVideo(), getEditVideo);
videoRouter.post(routes.editVideo(), postEditVideo);
export default videoRouter;
当我转到“videos/“id”/edit”时,我在浏览器中看到此错误-无法获取/videos/5ed2a169eb370432c01f5ebd/edit
我在views目录中有一个名为“editVideo.pug”的pug模板,我不知道它为什么不工作。您的路线应该从
/
开始。因此,这个videos/${id}/edit
应该是/videos/${id}/edit
.FYI,这是一种奇怪的方式,看起来您为每个现有id添加了一条单独的路由。这相当麻烦,因为您的服务器可能最终会有无数条路由和一个较慢的过程来匹配所有路由,而且永远无法删除一条。通常,您会使用类似于/videos/:id/edit
的路由,然后从req.params.id动态使用getEditVideo
中的id,Express将在其中为您放置该id。你不这样做有什么原因吗?谢谢你的回答。我改变了路线,但仍然出现同样的错误。是的,我知道REST路由,我刚刚看到了这种路由方式,我自己也在尝试,但你是对的,/videos/:id/编辑方式更具动态性。谢谢,id
在videoController.js中来自哪里?我在任何地方都没有看到它的定义。您的路线应该以/
开始。因此,这个videos/${id}/edit
应该是/videos/${id}/edit
.FYI,这是一种奇怪的方式,看起来您为每个现有id添加了一条单独的路由。这相当麻烦,因为您的服务器可能最终会有无数条路由和一个较慢的过程来匹配所有路由,而且永远无法删除一条。通常,您会使用类似于/videos/:id/edit
的路由,然后从req.params.id动态使用getEditVideo
中的id,Express将在其中为您放置该id。你不这样做有什么原因吗?谢谢你的回答。我改变了路线,但仍然出现同样的错误。是的,我知道REST路由,我刚刚看到了这种路由方式,我自己也在尝试,但你是对的,/videos/:id/编辑方式更具动态性。谢谢,id
在videoController.js中来自哪里?我看不出它在任何地方有定义。