Node.js搭建简易的服务器(2)

上一章我们搭建了一个可以根据请求路径返回对应字符的服务器,但是它实际上没有什么用处(只是了解一下怎么使用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是读取出来的数据。

服务器代码编写完毕了,我们来看一下效果

 

 

 本章就讲到这里,下一章我将会讲解怎么配置静态资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值