동적으로 경로를 만드는 express.js로 간단한 CMS를 만들려고합니다.Express.js (node.js)로 동적 라우팅을 수행하는 가장 좋은 방법
pagesfromdb = {
home = {
paths = ['/','/home','/koti'],
render = 'home.ejs',
fi_FI = {html='<h1>Hei maailma!</h1>'},
en_US = {html='<h1>Hello World!</h1>'}
},
about = {
paths = ['/about','/tietoja'],
render = 'general.ejs',
fi_FI = {html='Tietoja'},
en_US = {html='About Us'}
}
}
및 반복과 같이 경로를 만드는 개체 이상 :
Object.keys(pagesfromdb).forEach(function(key) {
var page = pagesfromdb[key];
app.get(page.global.paths,function(req, res){
res.render(page.render, page[language]);
});
});
이제 모든 것이 제대로 작동 그것은 다음과 같습니다 데이터베이스에서 JSON을 가져옵니다. 하지만 문제는 사용자가 콘텐츠와 경로를 수정할 때마다 전체 노드 앱을 다시 시작해야한다는 것입니다. 경로를 제거하기 위해 API 호출을 찾지 못했습니다.
app.get으로 설정된 이전 경로를 안전하게 제거 할 수있는 방법이 있습니까? 나는 그 일을해야합니까?
이런 종류의 라우팅을 수행하는 더 좋은 방법이 있습니까? 내가 내장 된 함수를 사용할 수있게 해주는이 메소드가 마음에 들지만, 빠르며 정규 표현식을 지원한다.
app.routes = nul을 사용하여 전체 app.routes를 제거하려고 시도했지만 아무 것도하지 않았으므로 기존 경로가 그대로 유지되었습니다. 실제로 제거 않았다
한 가지
delete app._router.map.get;
app._router.map.get = [];
이었다 그러나 이것은 실제로 제거 않으며, 그렇게 사용하는 라우터가 다시 채워지고 계속하면 나는 숫양의 엄청난 양을 납치 결국하지 않는 안전합니까?
AFAIk express는 app._router.map에있는 모든 경로를 유지하므로 제대로 작동합니다. –
supernova
걱정해야 할 렌더링과 관련된 캐시가 있습니까? 또는 바로 아래에 있기 때문에 app._router.map을 사용하여 앱을 제거한 것입니까? 프로덕션 모드에서 –
을 표현하면 캐시는 app.cache [viewname]를 통해 액세스 할 수 있습니다. – supernova