美文网首页
03-Node-http模块

03-Node-http模块

作者: Am3 | 来源:发表于2019-10-28 09:28 被阅读0次

    Node - http 模块

    HTTP 协议是什么

    HTTP 超文本传输协议,用于规范客户端浏览器和服务器之间的数据交互的格式,特点是无连接,无状态

    • 无连接:每次连接只处理一个请求,响应完成后断开连接
    • 无状态:协议对于事务处理没有记忆能力

    创建服务器

    // 引入http模块
    const http = require('http');
    
    // 创建WEB服务器
    const app = http.createServer();
    
    // 监听请求
    // req -- request ---- 请求对象, 保存了和请求有关的全部信息
    // res -- response ---- 响应对象, 通过它控制响应给浏览器信息
    app.on('request', (req, res) => {
        res.end('ok')
    })
    
    app.listen(3000);
    console.log('run');
    

    根据 url 地址响应不同的内容

    // 根据 url 地址响应不同的内容
    const http = require('http');
    const url = require('url');
    
    const app = http.createServer();
    
    app.on('request', (req, res) => {
        let pathname = url.parse(req.url).pathname.toLowerCase();
        if (pathname === '/index') {
            res.end('index');
        } else if (pathname === '/list') {
            res.end('list');
        } else {
            res.end('not found');
        }
    });
    
    app.listen(3000, () => {
        console.log('run');
    });
    

    动态响应静态资源

    // 动态响应静态资源
    const http = require('http');
    const url = require('url');
    const path = require('path');
    const fs = require('fs');
    
    const app = http.createServer();
    app.on('request', (req, res) => {
        let pathname = url.parse(req.url).pathname.toLowerCase();
        pathname = pathname === '/' ? 'default.html' : pathname;
        let realPath = path.join(__dirname, 'public', pathname);
    
        fs.readFile(realPath, (err, data) => {
            if (err) {
                // 设置响应内容格式
                res.writeHead(404, {
                    'content-type': 'text/plain;charset=utf8'
                });
                return res.end(err.message)
            }
            res.end(data)
        })
    });
    
    app.listen(3000, () => {
        console.log('run');
    });
    

    获取 GET 请求参数

    const http = require('http');
    const url = require('url');
    const querystring = require('querystring');
    
    const app = http.createServer();
    app.on('request', (req, res) => {
        // 获取 dasjk=121 字符串
        let query = url.parse(req.url).query;
        // 将 dasjk=121 字符串解析成对象
        let params = querystring.parse(query);
    
        for (let i in params) {
            let index = "" + i;
            console.log(i, params[index]);
        }
        res.end();
    });
    app.listen(3000);
    console.log('run');
    

    获取 POST 请求参数

    const http = require('http');
    const fs = require('fs');
    
    const app = http.createServer();
    app.on('request', (req, res) => {
        let postParams = '';
    
        // post 参数是通过事件的方式接受的
        // 因为 post 提交的内容是未知大小
        // data 当请求参数传递时, data 事件触发
        // end 当请求参数传递完成时, end 事件触发
    
        req.on('data', (data) => {
            // console.log(data);
            postParams += data;
    
        });
    
        req.on('end', () => {
            console.log(postParams);
        });
    });
    app.listen(3000);
    console.log('run');
    

    相关文章

      网友评论

          本文标题:03-Node-http模块

          本文链接:https://www.haomeiwen.com/subject/jjyvvctx.html