提供静态文件节点

时间:2015-05-07 20:25:32

标签: javascript html node.js

我正在尝试只使用Node(没有额外的npms或express)。这是我当前的路由处理程序:

function requestHandler(req, res) {

    var localFolder = __dirname + '/views/',
            page404 = localFolder + '404.html',
            fileToServe = "";

    if(/\/posts\/\d+/.test(req.url)){   
        fileToServe = __dirname + req.url.match(/\/posts\/\d+/) +'.json';
        fs.stat(fileToServe, function(err, contents){
            if(!err && contents){
                res.end(templateEngine('post',fileToServe));
            } else {
                res.end(templateEngine('error', err))
            }
        });
    } else if (/\/posts\//.test(req.url)){

    } else if (/.+[^\W]$/.test(req.url)){
        fileToServe = __dirname + '/views' + req.url.match(/\/.+[^\W]$/gi);
        fs.stat(fileToServe, function(err, contents){
            if(!err && contents){
                res.end(fs.readFileSync(fileToServe));
            } else {
                res.end(templateEngine('error', err))
            }
        });
    }
}

我有两个问题:

在我的一个视图中,如果<link>标记带有css文件。当我直接进入路径时,它会被提供(这是抓住它的正则表达式:/.+[^\W]$/.test(req.url))。但是,如上所述,我从模板引擎构建的一个视图使用css文件。

浏览器在看到链接标记时如何工作?它是否向我的本地服务器(节点)发送GET请求?如果是这样,为什么我的服务器没有发送回复?当我直接进入链接时,它会完美地发送响应。

此外,当我尝试访问链接标记中使用css文件的页面时,它只会挂在空白页面上。当我杀死服务器时,它说它从未收到过响应(再一次,当我直接进入链接时,我得到了正确的文件)。

我是否需要重新组织路线?单独提供静态文件?

1 个答案:

答案 0 :(得分:2)

  

浏览器在看到链接标记时如何工作?它是否向我的本地服务器(节点)发送GET请求?

是。浏览器根据当前URL创建完整的URL,并像对待任何其他资源一样发出HTTP GET请求。

  

如果是,为什么我的服务器没有发送回复?当我直接进入链接时,它会非常正确地发送响应。

所有证据都表明,在if-blocks处理程序中没有捕获链接到css的页面。尝试将几个console.log s放在requestHandler内,另一个放在应该处理页面请求的块中。我认为您只会在服务器控制台中看到一个日志。