初学 node.js,读取本地html文件报错
问题描述
const http = require(’http’);const fs = require(’fs’);const server = http.createServer((request, response) => { const fileName = ’/’ + request.url; console.log(fileName); fs.readFile(fileName, (error, data) => { if(error) { throw new Error(’cannot read this file’); } else { response.write(data); } response.end(); });});server.listen(6060);
跟着视频学习的。。为啥就不能读取我要的文件呢?我先在文件夹中写入了一个 index.html,然后试着在 localhost:6060/index.html 中读取文件并渲染到浏览器中,但是抛出错误了。
Error: cannot read this file at ReadFileContext.fs.readFile [as callback] (E:node_learn06 - output to clientserver.js:10:13) at FSReqWrap.readFileAfterOpen [as oncomplete] (fs.js:365:13)
求教我应该怎么解决它呢?我哪里做错了呀~~感谢您的回答。
问题解答
回答1:要学会基本的调试方法啊……假设你访问的是 127.0.0.1:6060/index.html,那么你的request.url 就是 /index.html;那么filename就是 【//index.html】,请问你去读//index.html,怎么可能读出来呢?
即便你的filename不加上多余的/,你去读/index.html,也是读不出来的啊!你应该想办法把斜杠去掉,直接去读index.html ,说道这里你明白了吗。至于说你怎么去掉,你可以简单除暴的操作request.url,用slice等函数获得去掉/之后的结果,也可以用path等库文件解析,均可。
另外,即使你读出来了,这一段代码也不可能渲染到浏览器中,浏览器会把读到的文件当做文本,也就是会把你的html源码显示出来。要想浏览器渲染html,还需要在响应的header中指定content-type:text/html,因为你不指定content-type的话,默认就是text/plain,也就是直接当做文本显示。
回答2:请使用相对路径