node原生web服务器

151 阅读1分钟

http模块

//1.导入http模块
const http = require("http");
//2.创建服务器
//2-1.调用createServer获取到服务器实例对象
const server = http.createServer();
//2-2.监听端口,启动服务
server.listen(8080, () => {
    console.log("http://127.0.0.1:8080");
});

//2-3.监听服务端的"request"事件(客户端的请求事件)
//() => void:客户端发来的请求
//request:请求的所有信息
//resovle:响应的所有信息
server.on("request", (request, resovle) => {
    //响应客户端
    resovle.write('aaaaa')
    //断开服务
    resovle.end()
});

解决中文乱码问题

原因:客户端不理解服务端发过来的数据类型

解决:配置请求头

    //"Content-type":内容类型
    // text/plain:纯文本类型
    // charset=utf-8:字符编码
     resovle.setHeader("Content-type","text/plain;charset=utf-8")
     resovle.write('中文')
    // text/html:html类型
    resovle.setHeader("Content-type","text/html;charset=utf-8")
    resovle.write('<h1>中文</h1>')

读取html文件

const fs = require("fs");
//读取文件
fs.readFile(路径,字符编码,(报错信息,文件类容)=>{})
//写入文件
fs.writeFile(路径,写入类容,(报错信息) => {})
    if(request.url == '/'){
        fs.readFile('./index.html','utf8',(err,data) => {
            //遇到图片会再次请求
            resovle.write(data)
            resovle.end();
        })
    }else{
        fs.readFile('./a.png',(err,data) => {
            // end传值就会先write(data)
            resovle.end(data);
        })
    }

请求方法

GET:获取服务器资源
POST:向服务器提交数据
PUT:向服务器写入资源,如果存在则替换
DELETE:删除资源
HEAD:获取服务器响应头
OPTIONS:询问服务器所支持的请求方法
request.method 获取到请求方法

get

使用 url 模块

    if(request.method == 'GET'){
        //请求头传参
        // url.parse(处理地址,true:将query设置为对象)
        console.log(url.parse(req.url,true).query.id);
    }

post

    if(req.method == 'POST'){
        let val = ''
        //请求体传参
        //因为http模块是基于net模块的,所以可以直接使用net的事件
        req.on('data',(d) => {
            val += d
        })
        //所有数据全部发完了
        req.on('end',() => {
           //数据额转移处理
           //querystring模块
           console.log(querystring.parse(val));
        })

        res.end()
    }