Node.js 快速获取路线:如何实现干燥
我有下面这样的代码来获取进程路径Node.js 快速获取路线:如何实现干燥,node.js,express,Node.js,Express,我有下面这样的代码来获取进程路径 router.get( "/todoHome", ( req, res ) => { res.render( "todoHome", { title: 'My Todo List!!' } ); } ); router.get( "/articles", ( req, res ) => { res.render( "articles", { title: 'Articles To Read' } );
router.get( "/todoHome", ( req, res ) => {
res.render( "todoHome",
{ title: 'My Todo List!!' } );
} );
router.get( "/articles", ( req, res ) => {
res.render( "articles",
{ title: 'Articles To Read' } );
} );
router.get( ["/", "/index"] ( req, res ) => {
res.render( "index",
{ title: 'Homepage' } );
} );
router.get( "/primary" ( req, res ) => {
res.render( "primaryurls",
{ title: 'Primary DC URLs' } );
} );
router.get( "/standby" ( req, res ) => {
res.render( "standbyurls",
{ title: 'Standby DC URLs' } );
} );
我觉得我可以再添加一些类似的条目
有什么办法我可以在这里实行干法吗
谢谢。您可以创建一个助手函数,该函数将帮助您渲染模板 比如:
function renderPage(resObject, template, title = '', data = {}) {
resObject.render(template, {
title,
...data,
});
}
然后,使用路由器功能中的功能:
router.get("/todoHome", (req, res) => {
return renderPage(res, 'todoHome', 'My Todo List!!')
});
const routeData = [
['/todoHome', 'todoHome', 'My Todo List!!'],
['/articles', 'articles', 'Articles To Read'],
['/', 'index', 'Homepage'],
['/index', 'index', 'Homepage'],
['/primary', 'primaryurls', 'Primary DC URLs'],
['/standyby', 'standbyurls', 'Standby DC URLs']
];
// insert routes from the data in the table
for (const [path, name, title] of routeData) {
app.get(path, (req, res) => {
res.render(name, {title});
});
}
您可以创建一个助手函数,该函数将帮助您渲染模板 比如:
function renderPage(resObject, template, title = '', data = {}) {
resObject.render(template, {
title,
...data,
});
}
然后,使用路由器功能中的功能:
router.get("/todoHome", (req, res) => {
return renderPage(res, 'todoHome', 'My Todo List!!')
});
const routeData = [
['/todoHome', 'todoHome', 'My Todo List!!'],
['/articles', 'articles', 'Articles To Read'],
['/', 'index', 'Homepage'],
['/index', 'index', 'Homepage'],
['/primary', 'primaryurls', 'Primary DC URLs'],
['/standyby', 'standbyurls', 'Standby DC URLs']
];
// insert routes from the data in the table
for (const [path, name, title] of routeData) {
app.get(path, (req, res) => {
res.render(name, {title});
});
}
充其量,你可以把这些电话连起来
router.get(“/todoHome”,(req,res)=>{
res.render(“todoHome”,
{title:'我的待办事项列表!!'});
})
.get([“/”,“/索引”](请求,恢复)=>{
res.render(“索引”,
{标题:'主页'});
})
.得到(
//......
)
或
const标题={
“待办事项”:我的待办事项列表,
“索引”:“主页”,
......
}
路由器.get(“*”,(请求,res)=>{
const path=req.path.replace('/','')
res.render(路径,{title:titles[path]});
})
还有一个建议:不要试图成为代码完美主义者。这会毁了你的学习。欢迎来到现实世界。这有点脏。充其量,你可以把那些get电话链接起来
router.get(“/todoHome”,(req,res)=>{
res.render(“todoHome”,
{title:'我的待办事项列表!!'});
})
.get([“/”,“/索引”](请求,恢复)=>{
res.render(“索引”,
{标题:'主页'});
})
.得到(
//......
)
或
const标题={
“待办事项”:我的待办事项列表,
“索引”:“主页”,
......
}
路由器.get(“*”,(请求,res)=>{
const path=req.path.replace('/','')
res.render(路径,{title:titles[path]});
})
还有一个建议:不要试图成为代码完美主义者。这会毁了你的学习。欢迎来到现实世界。这有点脏。当在重复函数中使用大量外观相似的数据时,您可以将整个内容设置为表驱动,这是一种goto技术:
router.get("/todoHome", (req, res) => {
return renderPage(res, 'todoHome', 'My Todo List!!')
});
const routeData = [
['/todoHome', 'todoHome', 'My Todo List!!'],
['/articles', 'articles', 'Articles To Read'],
['/', 'index', 'Homepage'],
['/index', 'index', 'Homepage'],
['/primary', 'primaryurls', 'Primary DC URLs'],
['/standyby', 'standbyurls', 'Standby DC URLs']
];
// insert routes from the data in the table
for (const [path, name, title] of routeData) {
app.get(path, (req, res) => {
res.render(name, {title});
});
}
当在重复函数中使用大量类似外观的数据时,您可以使整件事成为表驱动,这是一种goto技术:
router.get("/todoHome", (req, res) => {
return renderPage(res, 'todoHome', 'My Todo List!!')
});
const routeData = [
['/todoHome', 'todoHome', 'My Todo List!!'],
['/articles', 'articles', 'Articles To Read'],
['/', 'index', 'Homepage'],
['/index', 'index', 'Homepage'],
['/primary', 'primaryurls', 'Primary DC URLs'],
['/standyby', 'standbyurls', 'Standby DC URLs']
];
// insert routes from the data in the table
for (const [path, name, title] of routeData) {
app.get(path, (req, res) => {
res.render(name, {title});
});
}
我找到了另一个类似的解决方案,如下所示
var titleObj = {
"/kbs": "KB Articles",
"/articles": "Articles-To-Read"
}
var renderObj = {
"/kbs": "kbarticles",
"/articles": "articles",
}
var schemaObj = {
"/kbs": kbarticlesSchema,
"/articles": kbarticlesSchema,
}
var routeArray = ["/kbs", "/articles"];
router.get( routeArray, ( req, res ) => {
console.log( req.path );
schemaObj[req.path].find()
.then( ( kbs ) => {
res.render( renderObj[req.path],
{
title: titleObj[req.path],
kbs: kbs
} );
} );
} );
通过这种方式,您不必触摸路由器。获取方法,您可以根据需要更新相应的对象,从而不断更新新路由
希望有帮助。我找到了另一个类似的解决方案,如下所示
var titleObj = {
"/kbs": "KB Articles",
"/articles": "Articles-To-Read"
}
var renderObj = {
"/kbs": "kbarticles",
"/articles": "articles",
}
var schemaObj = {
"/kbs": kbarticlesSchema,
"/articles": kbarticlesSchema,
}
var routeArray = ["/kbs", "/articles"];
router.get( routeArray, ( req, res ) => {
console.log( req.path );
schemaObj[req.path].find()
.then( ( kbs ) => {
res.render( renderObj[req.path],
{
title: titleObj[req.path],
kbs: kbs
} );
} );
} );
通过这种方式,您不必触摸路由器。获取方法,您可以根据需要更新相应的对象,从而不断更新新路由
希望有帮助。@ggorlen,在我的代码中添加了一些现有条目(实际上我排除了它们以保持问题的简单性)谢谢,这对我来说更明显。@ggorlen,在我的代码中添加了一些现有条目(实际上我排除了它们以保持问题的简单性)谢谢,对我来说,这看起来更湿了。比以前更令人兴奋的事情,没有任何理由。只需使用额外的方法,就可以用更多的代码行完成同样的事情。它类似于:
函数consoleLog(string){console.log(string)}consoleLog('hi')
。还有,当除了头衔之外还有别的事情发生时,你会怎么做?毫无理由比以前更令人兴奋的事情。只需使用额外的方法,就可以用更多的代码行完成同样的事情。它类似于:函数consoleLog(string){console.log(string)}consoleLog('hi')
。另外,当你有其他的东西时,你会怎么做?这比你要求的答案要枯燥得多。所有被接受的答案都是通过链接.get()
调用来删除对路由器的一些引用。这就增加了四条代码和一个简单表的所有路由。@ R.Y.D,你考虑了这个解决方案吗?这比你要求的答案要枯燥得多。所有被接受的答案都是通过链接.get()
调用来删除对路由器的一些引用。这将使用四行代码和一个简单的表添加所有路由。