通过NodeJS使用HTML文件加载JS文件的正确方法

sia*_*sia 6 javascript static-html readfile node.js

我不能将服务的defualt.htm页面的头部内容包含在"工作"中.dom中的html加载,只有CSS和JS文件失败.还有更好的选择吗?我喜欢将解决方案保留在NodeJS中,但也可以打开socket.io并表达.

谢谢,下面是我正在使用的.

NodeJS为页面服务

var http = require('http'),
fs = require('fs');

fs.readFile(__dirname+'/default.htm', function (err, html) {
    if (err) {
        throw err; 
    }       
    http.createServer(function(request, response) {  
        response.writeHeader(200, {"Content-Type": "text/html"});  
        response.write(html);  
        response.end();  
    }).listen(port.number);
});
Run Code Online (Sandbox Code Playgroud)

Default.html页面

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="utf-8" />
    <title></title>
    <link rel="stylesheet" href="objects/css/site.css" type="text/css" />
    <script src="objects/js/jquery.min.js" type="text/javascript"></script>
    <script src="objects/js/site.min.js" type="text/javascript"></script>
</head>

<body></body>    

</html>
Run Code Online (Sandbox Code Playgroud)

Hen*_*son 3

我也将在这里投入我的两分钱。

我解决与提供静态文件相同的问题的方法是开始使用 Paperboy 模块,该模块现在已被弃用,取而代之的是 Send 模块。

不管怎样,我解决这个问题的方法是在请求进入我的 GET 方法之前“劫持”请求并检查它的路径。

我“劫持”的方式如下

self.preProcess(self, request, response);
Run Code Online (Sandbox Code Playgroud)

preProcess: function onRequest(app, request, response){ //DO STUFF }
Run Code Online (Sandbox Code Playgroud)

如果路径包含 STATICFILES 目录,我会执行不同的文件服务,否则我会使用“html”路径。下面是该//DO STUFF函数preProcess()

var path = urllib.parse(request.url).pathname;
if(path.indexOf(settings.STATICFILES_DIR) != -1) {
    path = settings.STATICFILES_DIR;
    requestedFile = request.url.substring(request.url.lastIndexOf('/') + 1, request.url.length);
    return resolver.resolveResourceOr404(requestedFile, request, response);
}
Run Code Online (Sandbox Code Playgroud)

可能有更好的方法来做到这一点,但这对于我需要它做的事情来说就像一个魅力。

然后使用 Paperboy 模块,使用该resolver.resolveResourceOr404();函数传递文件,如下所示

resolveResourceOr404 : function (filename, httpRequest, httpResponse) {
    var root = path.join(path.dirname(__filename), '');

    paperboy.deliver(root, httpRequest, httpResponse)
    .error(function(e){
        this.raise500(httpResponse);
    })
    .otherwise(function(){
        this.raise404(httpResponse);
    });
}
Run Code Online (Sandbox Code Playgroud)