2015-05-07 63 views
0

我想只使用节点(没有额外的npms或快递)。这是我目前的路由处理:服务静态文件节点

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文件的页面时,它只是挂在一个空白页面上,当我杀死服务器时,它说它从来没有收到响应(再一次,当我直接去链接,我得到正确的文件)。

我必须重新组织我的路线吗?分别提供静态文件?

+0

它是否使用正确的内容类型发送响应? –

+0

当我直接打它它。当我转到在链接标签中使用它的页面时,“GET”请求只是“挂起”,如果我得到了回复,我会认为它是正确的内容类型。 – HelloWorld

回答

2

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

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

如果是这样,为什么我的服务器没有发送回应?当我直接进入链接时,它会很好地发送响应。

所有证据都表明,链接到css的页面没有在处理程序if-blocks中被捕获。试着把几个console.logs,一个放在requestHandler里面,另一个放在应该处理页面请求的块中。我想你只能在服务器控制台看到一个日志显示。