node和Apache是没有web容器的,node的目录下的同级文件是无法使用/filename进行访问的,因为node没有根目录门也没用web容器!
简单解释一下上面的话
比如我的node项目在d盘的nodedemo文件夹下file.js,同级目录下有index.html
file.js监听的端口是3001,可以使用127.0.0.1:3001进行访问node项目,但是这个index.html怎么访问呢?
经受Apache的洗脑,有同学会自作聪明,加/filename访问,即127.0.0.1:3001/index.html,发现这样做是不行的!因为ndoe没有web容器,没有web容器,没有web容器!重要的说三遍!那么这个问题如何解决呢!
首先我们会用到一个fs模块!就像http模块,这里的fs是文件系统模块!
代码实例
file.js.
//引入模块
const http =require("http");
//引入文件模块
const fs= require("fs");
//创建服务器
const server = http.createServer(function(req,res){
//设置响应头
res.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"})
//请求的路由地址
if(req.url == "/" || req.url=="/index.html"){
fs.readFile("index.html",function(err,data){
//设置响应头
res.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
//加载的数据结束
res.end(data)
})
}
else{
res.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
//加载的数据结束
res.end('<h1> 所需内容未找到404 </h1>')
}
})
//监听端口
server.listen(3001,"127.0.0.1")
这样通过url路由访问127.0.0.1/或者127.0.0.1/index.html就可以访问到同级的index.html文件了!
下面简单解释一下这个fs.readFile(读取文件)
上述代码中看到请求的路由(req.url)后的读取文件
代码分析
fs.readFile("index.html",function(err,data){
//设置响应头
res.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
//加载的数据结束
res.end(data)
})
需要找到读取的文件(路径很重要,不啊哟搞错了,这里是相对路径),然后一个回调函数,这个函数有两个参数err和data,
err表示错误,data表示这个加载的文件的数据!
设置http的响应头,res.end(data)页面输出加载的内容并结束!
简单的文件加载搞定,下面一篇我们继续介绍文件加载进阶篇!