我正在尝试只使用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文件的页面时,它只会挂在空白页面上。当我杀死服务器时,它说它从未收到过响应(再一次,当我直接进入链接时,我得到了正确的文件)。
我是否需要重新组织路线?单独提供静态文件?
答案 0 :(得分:2)
浏览器在看到链接标记时如何工作?它是否向我的本地服务器(节点)发送GET请求?
是。浏览器根据当前URL创建完整的URL,并像对待任何其他资源一样发出HTTP GET请求。
如果是,为什么我的服务器没有发送回复?当我直接进入链接时,它会非常正确地发送响应。
所有证据都表明,在if-blocks处理程序中没有捕获链接到css的页面。尝试将几个console.log
s放在requestHandler
内,另一个放在应该处理页面请求的块中。我认为您只会在服务器控制台中看到一个日志。