如何动态路由页面?

时间:2015-11-26 23:07:43

标签: javascript node.js express

如何在不使用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);

4 个答案:

答案 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