HTTP 服务可以设置响应头 Content-Type 来表明响应体的 MIME 类型,浏览器会根据该类型决定如何处理资源
const http=require('http');
const fs=require('fs');
const path=require('path')
let mimes={
html: 'text/html',
css: 'text/css',
js: 'text/javascript',
png: 'image/png',
jpg: 'image/jpeg',
gif: 'image/gif',
mp4: 'video/mp4',
mp3: 'audio/mpeg',
json: 'application/json'
}
const server=http.createServer((request,response)=>{
response.setHeader('content-type','text/html;charset=utf-8')
//读取文件内容
//获取请求URL的路径
let {pathname}=new URL(request.url,'http://127.0.0.1');
//拼接文件路径
let filePath=__dirname+'/page'+ pathname;
//读取文件fs异步API
fs.readFile(filePath,(err,data)=>{
if(err){
response.setHeader('content-type','text/html;charset=utf-8')//解决中文乱码问题
//判断段错误代号
switch(err.code){
case 'ENOENT':
response.statusCode=404
response.end('<h1>404 Not Found</h1>')
}
// response.statusCode=500
// response.end('文件读取失败')
return;
}
//获取文件名后缀
let ext=path.extname(filePath).slice(1)
//获取对应的类型
let type=mimes[ext]
if(type){
//匹配到
response.setHeader('content-type',type+';charset=utf-8')//解决中文乱码问题
}else{
response.setHeader('content-type','application/octet-stream')
}
//响应文件内容
response.end(data)
})
// if(pathname ==='/index.html'){
// let html=fs.readFileSync(__dirname+'/page/index.html')
// response.end(html)
// }else if(pathname ==='/css/app.css'){
// let css=fs.readFileSync(__dirname+'/page/css/app.css')
// response.end(css)
// }else if(pathname ==='/images/logo.png'){
// let img=fs.readFileSync(__dirname+'/page/images/logo.png')
// response.end(img)
// }else{
// response.statusCode=404;
// response.end('<h1>Not Found</h1>')
// }
})
//监听端口,启动服务
server.listen(9000,()=>{
console.log('服务已经启动...');
})