带有Node.js的动态app.get URL切换案例?

时间:2014-08-10 20:11:13

标签: javascript node.js express switch-statement

我正在尝试简化一些Web服务器代码(Node.js和Express),为了简单起见,我只想使用一个app.get语句。我试过这个:

app.get(url, function(req, res){
    switch(url){
        case "/":
            res.sendfile('index.html');
            res.writeHead(200, {"Content-Type": "text/plain"});
            console.log("Client requested /");
            break;
        case "/profile":
            res.sendfile('profile.html');
            res.writeHead(200, {"Content-Type": "text/plain"});
            console.log("Client requested /profile");
            break;
        default:
            res.sendfile('404.html');
            res.writeHead(404, {"Content-Type": "text/plain"});
            console.log("Client requested page not found - 404 error");
    }
});

但它引发了“引用错误:url未定义”错误。我是否真的需要将每个可能请求的URL编码为第一个参数的字符串文字,并且有多个app.get语句,或者有没有办法使用switch case或类似的东西?

1 个答案:

答案 0 :(得分:0)

您可以执行基于地图的查找来映射网址和资源。使用app.use将其打包在中间件中。

app.use(function(req, res){
    routes = {
      '/': 'index.html',
      '/profile': 'profile.html'
    };

    var url = req.url;

    if (routes[url] !== undefined) {
        res.writeHead(200, {"Content-Type": "text/plain"});
        res.sendfile(route[url]);
        console.log("Client requested", url);
    } else {
        res.writeHead(404, {"Content-Type": "text/plain"});
        res.sendfile('404.html');
        console.log("Client requested page not found - 404 error");
    }
});