上一章我们搭建了一个可以根据请求路径返回对应字符的服务器,但是它实际上没有什么用处(只是了解一下怎么使用node.js搭建服务器),那么这一章我们搭建一个可以返回文件页面的服务器。
我们先来看一下项目结构
可以看到,我们所有的html文件都在项目下的public文件夹下的html文件夹内。
接下来开始在app.js中编写服务器代码
const http = require('http');
const fs = require('fs');//文件模块,可用于文件的读写操作
const PORT = 8080;//定义端口号
// 响应类型对象,根据文件后缀名设置对应的响应头
const mime = {
".jpg" : "image/jpeg",
".jpeg" : "image/jpeg",
".gif" : "image/gif",
".png" : "image/png",
".html" : "text/html;charset=UTF-8",
".css" : "text/css",
".js" : "application/x-javascript",
".mp3" : "audio/mpeg",
".mp4" : "video/mpeg"
};
//创建服务器
http.createServer((req,res)=>{
if(req.url === '/'){
//fs.readFile(path,encoding,callback) 异步读取文件,可处理报错,它还有一个同族函数(同步读取文件函数)fs.readFileSync(path,encoding) path:文件路径 encoding:读取文件使用的编码 callback:回调函数,它有两个参(err:报错信息,没有报错则为空;data:读取出来的数据) __dirname:当前运行js脚本在本地所在文件夹的绝对路径,然后字符串拼接即可
fs.readFile(__dirname+'/public/html/index.html','utf-8',(err,data)=>{
if(err){
//读取文件报错设置响应http状态码为500(服务器内部错误) 然后返回
res.statusCode = 500;
res.end('error');
}else{
//没有报错时设置html文件的响应头 然后返回html文件数据
res.setHeader('Content-Type',mime['.html']);
res.end(data);
}
});
}else if(req.url === '/home'){
fs.readFile(__dirname+'/public/html/home.html','utf-8',(err,data)=>{
if(err){
res.statusCode = 500;
res.end('error');
}else{
res.setHeader('Content-Type',mime['.html']);
res.end(data);
}
});
}else if(req.url === '/shopping'){
fs.readFile(__dirname+'/public/html/shopping.html','utf-8',(err,data)=>{
if(err){
res.statusCode = 500;
res.end('error');
}else{
res.setHeader('Content-Type',mime['.html']);
res.end(data);
}
});
}else{
//当用户访问的路由不符合所有你预期的路由时,将http状态码设置为404,返回给客户端404页面(http状态码404意思是找不到该网址)
res.statusCode = 404;
res.end('404 not Found');
}
}).listen(PORT,()=>{
console.log('open server');
console.log(`http://127.0.0.1:${PORT}/`);
})
这里根据访问的路径,利用fs文件模块去读取对应路径想要给客户端返回的html文件,设置html文件对应的响应头,最后返回读取的html文件数据即可。
这里不使用fs模块,直接返回html格式的字符串也可以返回,效果是一样的,但是服务器代码看起来会很杂乱,不利于阅读,而且还有可能出现字符串拼接错误的问题,所以这里使用fs文件模块是一个最好的选择。
我们这里用到了fs文件模块,这个模块也是node.js的内置模块,无需下载。
fs模块提供了文件的读写操作,所有的读写操作都有异步和同步两个函数,我们这里用的fs.readFile(path,encoding,callback)就是读取文件的异步函数,这个函数的三个参数分别是:path文件路径,encoding:读取文件使用的编码,callback:回调函数(不管读取成功还是失败都会走这个回调函数) 这个回调函数接收两个参数,分别是error和data error是报错信息,无报错即为空,data是读取出来的数据。
服务器代码编写完毕了,我们来看一下效果
本章就讲到这里,下一章我将会讲解怎么配置静态资源。