如何在不使用app.get()的情况下每次动态路由每个页面? 我的代码也返回404错误代码,也是
console.log(page + " rendered");
由于某种原因不会工作。
var express = require('express');
var path = require('path');
var ejs = require('ejs');
var app = express();
app.engine('.html', ejs.__express);
app.set('views', __dirname + '/views');
app.set('view engine', 'html');
var pages = [
'users',
'index'
];
pages.forEach(function(page) {
app.get('/' + page, function(request, response) {
response.render(page);
console.log(page + " rendered");
});
console.log(page + " set up");
});
app.listen(80);
console.log('Express app started on port %d', 80);
答案 0 :(得分:0)
在路线中使用正则表达式。 ^和$分别表示开始和结束。 |表示或。您的要求的正则表达式为/^(users|index)$/
。
app.get(/^(users|index)$/, function (req, res, next) {
response.render(req.params[0]);
console.log(req.params[0] + " rendered");
});
答案 1 :(得分:0)
这是我使用express的动态路由架构,您可以根据自己的需要重新设置它。它需要放置一些"元数据"到一个对象数组(路由)
"use strict";
let express = require("express");
let routing = (req, res) => {
let router = express.Router(),
// "meta-data" for routes
routes = [{
path: "/",
view: "default",
title: "root"
}, {
path: "/otherpath",
view: "otherfile",
title: "otherpage"
}];
// iterates through routes looking for req.path
let routeIndex = routes.findIndex(route => route.path === req.path);
// if object in routes found with matching path
if (routeIndex >= 0) {
// serves content
res.status(200).render(routes[routeIndex].view, {
title: routes[routeIndex].title
});
} else {
// else 404s
console.log("404 from request: ", req.path);
res.status(404).sendFile(process.cwd() + "/views/404filename.htm");
}
return router
};
module.exports = routing;

答案 2 :(得分:0)
您可能希望动态查找网址视图,而不是为每个网页创建新路由。如果您没有处理处理程序中的路径,请确保调用next()
,以便调用更多路由和/或中间件。
var routes = {
'/users': 'users rendered',
'/index': 'index rendered',
}
app.get('*', (req, res, next) => {
let view = routes[req.path]
if (!view)
return next()
res.render(view)
})
app.use((req, res, next) => {
res.status(404).send('404 - Not found')
})
答案 3 :(得分:-1)
app.use('/', function(req, res) {
// whatever
});
这将匹配一切。在回调中,您可以进行渲染(您可以通过req
对象访问请求以呈现相应的页面)。请参阅app.use。