Node.js不正确的路径问题
当我执行Node.js不正确的路径问题,node.js,Node.js,当我执行fs.readFile(文件…时,我会出现以下错误: {[错误:enoint,打开'foundation/css/normalize.css'] 呃:34, 代码:'enoint' 路径:'foundation/css/normalize.css'} 我是否必须根据链接的HTML文件或运行服务器和路由器的node.js文件的位置来路由路径 不,我没有使用express,“使用express”不是一个可以接受的答案 编辑 @BenjaminGruenbaum的最后一条评论。我不确定你所说
fs.readFile(文件…
时,我会出现以下错误:
{[错误:enoint,打开'foundation/css/normalize.css']
呃:34,
代码:'enoint'
路径:'foundation/css/normalize.css'}
我是否必须根据链接的HTML文件或运行服务器和路由器的node.js文件的位置来路由路径
不,我没有使用express,“使用express”不是一个可以接受的答案
编辑 @BenjaminGruenbaum的最后一条评论。我不确定你所说的HTTP响应是什么意思,但我的代码逻辑如下:我通过URI加载index.html,当它
读取文件时,它会递归地遍历其他链接文件。我有一个脚本将其分解,以正确显示正确的内容类型。我会把它包括在这里,因为它太长了,无法发表评论:
function route(handle, pathname, response, request){
// console.log("About to route a request for " + pathname);
if (typeof handle[pathname] === "function"){
handle[pathname](response, request);
} else {
// console.log('NON HTML');
// console.log(pathname);
var file_path = "";
var mimes = {
'css': 'text/css',
'js': 'text/javascript',
'htm': 'text/html',
'html': 'text/html',
'png': 'image/png',
'jpg': 'image/jpg',
'jpeg': 'image/jpeg'
};
// parses the url request for a file and pulls the pathname
var url_request = url.parse(request.url).pathname;
// console.log('URL REQUEST');
// console.log(url_request);
// finds the placement of '.' to determine the extension
var tmp = url_request.lastIndexOf(".");
// determines the extension by uing .substring that takes everything after '.'
var extension = url_request.substring((tmp + 1));
// console.log('EXTENSION');
// console.log(extension);
//set path of static pages
if (extension === 'css' || extension === 'js' || extension === 'htm' || extension === 'html' || extension === 'png' || extension === 'jpg' || extension === 'jpeg'){
// console.log('LOAD STATIC PAGE');
file_path = url_request.replace("/", "");
// console.log(file_path);
// console.log();
}
//load needed pages and static files
fs.readFile(file_path, function (error, data){
if(error){
// console.log("AM I DEAD");
// console.log(error);
// console.log();
response.writeHeader(500, {"Content-Type": "text/html"});
response.write("<h1>FS READ FILE ERROR: Internal Server Error!</h1>");
}
else{
response.writeHeader(200, {"Content-Type": mimes[extension]});
console.log('SHOULD BE SUCCESS')
console.log(mimes[extension]);
// console.log(data);
response.write(data);
}
response.end();
});
response.end();
}
}
exports.route = route;
我为有点草率的缩进道歉
最终编辑:
这个愚蠢局面的最终解决方案可以在我的以下问题中找到:
非常感谢@BenjaminGruenbaum提供了一个Noob,您将不得不使用相对于NodeJS文件的路径(更具体地说是入口点),而不是客户端HTML
这就像它在bash脚本、Python和几乎任何其他语言中使用sane API一样,该API对操作系统中的本机文件系统函数进行sane调用
事实上,客户端HTML与节点中的路径无关——在节点的立场上,它只是以HTTP响应发送给客户端的文本。它根本不知道服务器的内部文件系统
(此外,我不认为像express这样的东西会有什么帮助)谢谢。给我5分钟,我会试试。我只是把它放在了关于express的文章中,因为这是对任何节点问题的最常见的回答。它会让meLet的隔离程序出错。创建一个名为server.js的新文件,在同一个目录中创建一个名为自述文件
的文件,并编写“Hello World”在它里面。server.js所做的就是在自述文件上调用fs.readFile。现在玩路径,做。/dirname/README
-这仍然有效。现在试着把自述文件放到一个新目录中,看看路径仍然有效。(顺便说一下,我刚刚在我的框中验证了所有这些).既然您确信问题不在于路径,请尝试调试它-在路径上打印控制台日志并在终端中手动打开,拼写错误在我身上发生了几十次:)请澄清,路径应该与脚本的执行位置相关,不一定是脚本在文件系统上的位置。@JDillon522同样,NodeJS不关心它发送给浏览器的内容。内容类型(通过添加标题btw:)将其设置为正确的值)意味着我们到达了客户端,问题不再是eNONT。但是,如果您收到该消息,则意味着您已经解决了原始问题:)@JDillon522您在哪里向头添加mime类型?为了清楚起见,它应该出现在HTTP响应上。
else{
response.writeHeader(200, {"Content-Type": mimes[extension]});
console.log('SHOULD BE SUCCESS')
console.log(mimes[extension]);
// console.log(data);
response.write(data);
}