Node.js 应用程序可以有静态 URL 吗?

发布于 2024-10-21 05:50:03 字数 249 浏览 4 评论 0原文

我听说过很多有关 Node.js 和 javascript Web 应用程序的信息。我所知道的示例的功能往往更像本机应用程序而不是 Web 应用程序,因为静态 URL 不可用。他们似乎不是可以链接到的专用页面。

我的问题是……如果静态页面 (URL) 的存在对于该应用程序至关重要(例如;考虑如何链接到推文或 eBay 列表),那么在 Node.js 中构建一个 Web 应用程序是否明智?或 WordPress 帖子)。

谢谢!

艾迪

So I've been hearing a lot about Node.js and javascript web apps in general. The examples that I know of tend to function more like native apps than web apps in that static URLs aren't available. Their doesn't seem to be dedicated pages that one can link to.

My question is...is it smart to build a web app in node.js if the presence of static pages (URLs) is essential to that app (for example; think of how one needs to link to a tweet or an ebay listing or a wordpress post).

Thanks!

Eddie

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心房敞 2024-10-28 05:50:03

这个答案适用于静态页面和文件,因为静态 url 并不是 Node.js 真正的问题,它在 中进行了介绍。 Express js 指南

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

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

根据我的经验,确实没有办法为 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 中指定的文件并将其提供给客户端。它需要您可以通过 NPM 获得的 mime 库。

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

This answer is for static pages and files since static urls is not really a problem with node.js, and it's covered here at the express js guide.

Using only node.js without any framework is a pretty bad idea if you're going to build a webapp. However, there are lots of good webframeworks for node.js that makes life a lot easier. If you've got NPM installed they are really easy to include too.

I've only got experience with express.js but it makes it really easy to create webapps if you've got any previous experience with any MVC type web-framework.

From my experience it's true that there is no way to serve static pages built in to node.js. However, building a controller that can serve static pages it really simple.

Here is an example using express.js.

server.js

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

This creates a route that captures every url going to the content directory and directs it to the action getfile in the content controller i.e. 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();
                    });

            });
    }
}
...

This action getfile in the content controller looks for the file specified in the URL in the content directory and serves it up to the client. It requires the mime library that you can get with NPM.

This enables the use of static files in the /content/ folder. If you'd like to you could make the route catch every non caught URL and look for a static file from the route up. However you'd have to set up some kind of filter so that you can't just access server.js file.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文