【问题标题】:Can Node.js apps have static URLs?Node.js 应用程序可以有静态 URL 吗?
【发布时间】:2011-07-12 16:42:39
【问题描述】:

所以我听说过很多关于 Node.js 和 javascript Web 应用程序的一般信息。我所知道的示例在静态 URL 不可用的情况下往往更像本机应用程序而不是 Web 应用程序。它们似乎不是可以链接到的专用页面。

我的问题是......如果静态页面 (URL) 的存在对于该应用程序至关重要(例如;考虑如何链接到推文或ebay 列表或 wordpress 帖子)。

谢谢!

艾迪

【问题讨论】:

    标签: web-applications node.js static-linking


    【解决方案1】:

    此答案适用于静态页面和文件,因为静态 url 并不是 node.js 的真正问题,它在 express js guide 中有所介绍。

    如果您要构建一个 web 应用程序,只使用 node.js 而不使用任何框架是一个非常糟糕的主意。然而,有很多优秀的 node.js 网络框架让生活变得更轻松。如果您安装了NPM,它们也很容易包含在内。

    我只有express.js 的经验,但如果您以前有任何 MVC 类型的网络框架的经验,那么创建网络应用程序真的很容易。

    根据我的经验,确实没有办法为 node.js 中内置的静态页面提供服务。但是,构建一个可以为静态页面提供服务的控制器非常简单。

    这是一个使用 express.js 的示例。

    server.js

    ...    
    app.get('/content/*', controllers.content.getfile);
    ...
    

    这将创建一个路由,该路由捕获到 content 目录的每个 url,并将其定向到内容控制器中的操作 getfile,即 www.yourdomain.com/content/style.css

    controllers.js

    ...
    exports.content = {
        getfile : function(req,res){
                var uri = url.parse(req.url).pathname;
                var filename = path.join(process.cwd(), uri);
                path.exists(filename, function(exists){
                        if(!exists){
                                res.writeHead(404, {"Content-Type" : "text/plain"});
                                res.write("Content not found");
                                res.end();
                                return;
                        }
    
                        fs.readFile(filename, "binary", function(err, file){
                                res.writeHead(200, {'Content-Type' : mime.lookup(filename) });
                                res.write(file, "binary");
                                res.end();
                        });
    
                });
        }
    }
    ...
    

    内容控制器中的此操作 getfile 在内容目录中查找 URL 中指定的文件并将其提供给客户端。它requires 可以通过 NPM 获得的 mime 库。

    这允许使用 /content/ 文件夹中的静态文件。如果您愿意,可以让路由捕获每个未捕获的 URL,并从路由向上查找静态文件。但是,您必须设置某种过滤器,这样您就不能只访问 server.js 文件。

    【讨论】:

    • 嗯。您提到不建议使用没有框架的 node.js 来构建 Web 应用程序。我认为 node.js 是一个 JS 框架。至少维基百科是这么告诉我的……“Node.js 是一个事件驱动的 I/O 框架,用于类 Unix 平台上的 V8 JavaScript 引擎。”
    • @Eddie node.js 主要在 V8 和系统的其余部分(sockets、file-io 等)之间提供了一座桥梁,在此之上它还有一个 http 库,所以你不需要必须自己处理http(因为http很难)。但是,如果您想以任何方式高效地构建 web 应用程序,您将需要额外的框架 (express.js),这样您就不必自己编写所有管道代码,用于路由和其他东西。这是另一层抽象。
    • 明白了……非常感谢奥斯卡!
    猜你喜欢
    • 2010-09-25
    • 2021-11-21
    • 2012-05-25
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 2013-07-24
    • 2016-01-25
    • 2011-02-27
    相关资源
    最近更新 更多