Node.js处理HTTP

req和res

1.nodejs如何监听http请求:

nodejs启动Web服务:
使用http模块启动服务,通过本机的IP(127.0.0.1)或本机的域名(localhost)访问服务。

// 获取http模块
const http = require("http");
// 创建一个服务器
const server = http.createServer(()=>{
    // 接收到请求后
    console.log("已经收到了http请求")
})
// 监听端口
server.listen(3000);
console.log("正在监听3000端口,请访问http://localhost:3000")

2.如何拿到并使用req和res:

// 获取http模块
const http = require("http");
// 创建一个服务器
const server = http.createServer((req,res)=>{
    // 接收到请求后
    // console.log("已经收到了http请求")
    const url = req.url;
    const method = req.method;
    console.log(url);
    // 返回一个response
    res.end('hello word')
})
// 监听端口
server.listen(3000);
console.log("正在监听3000端口,请访问http://localhost:3000")

querystring 

1.什么是querystring:

url问号?后面的都是querystring(也叫url参数);(url的hash,即url井号#后面的,不能让服务端获取)

&分割,key=value形式,可继续扩展。

2.querystring的作用:

我们可以利用querystring实现动态网页:

// 获取http模块
const http = require("http");

// 服务端拿到querystring
const querystring = require("querystring");


// 创建一个服务器
const server = http.createServer((req,res)=>{
    const method = req.method;
    const url = req.url;
    const path = url.split('?')[0];

// 获取queryString
const queryStr = url.split('?')[1];
const query = querystring.parse(queryStr || '')
    //  const query = {};
    // queryStr && queryStr.split('&').forEach((item)=>{
    //     const key = item.split('=')[0]
    //     const value = item.split('=')[1]
    //     query[key] = value;
    // })

// 定义一个GET路由
    if(method === 'GET' && path ==='/api/list'){
        // 根据不同的query返回不同的内容,即变化querystring就变化内容
        if(query.type === '1')res.end("this is a list router,all");
        if(query.type === '2')res.end("this is a list router,my");
    }
// 定义一个POST路由,使用POSTMAN发送
    // if(method === 'POST' && path ==='/api/creat'){
    //     res.end("this is a creat router")
    // }
    res.end("404")
})

// 监听端口
server.listen(3000);
console.log("正在监听3000端口,请访问http://localhost:3000")

res返回数据

1.返回json格式 

// 获取http模块
const http = require("http");

// 创建一个服务器
const server = http.createServer((req,res)=>{
    const method = req.method;
    const url = req.url;
    const path = url.split('?')[0];

// 定义一个GET路由
    // if(method === 'GET' && path ==='/api/list'){
    //     const result = {
    //         errno:0,
    //         data:[
    //             {user:"李四",content:"你们好"},
    //             {user:"李san",content:"dajia好"},
    //         ]
    //     }
    //     res.writeHead(200,{'Content-type':'application/json'});
    //     res.end(JSON.stringify(result))
    //     res.end(result);
    // }
    
// 定义一个POST路由,使用POSTMAN发送
    if(method === 'POST' && path ==='/api/create'){
        const result = {
            errno:0,
            message:"收到留言啦"
        }
        res.writeHead(200,{'Content-type':'text/plain'});
        res.end(JSON.stringify(result));
    }
    res.end("404")
})

// 监听端口
server.listen(3000);
console.log("正在监听3000端口,请访问http://localhost:3000")

2.返回html格式数据(了解)

    if(method === 'GET' && path ==='/api/list'){
        res.writeHead(200,{'Content-type':'text/html'});
        res.end(
            `<DOCTYPE html>
            <html>
                <head>
                <title>404</title>
                </head>
                <body>
                404 Not found
                </body>
            </html>`
        )}

获取Requst body  

1.流

1)浏览器能接收流(stream)数据:

服务端res.end(...),会自动以流的形式返回;

浏览器会识别到流,并持续接收信息(会有进度条);

待全部接收完,再做显示或处理(视频是一段一段播放的)

2)服务端如何接收流(stream)数据

前端使用Ajax提交数据Request Body;

服务端需要识别流,并接受数据;

还要知道合适才能接收完成

2.代码体验:

// 获取http模块
const http = require("http");

// 创建一个服务器
const server = http.createServer((req,res)=>{
    const method = req.method;
    const url = req.url;
    const path = url.split('?')[0];

    // 获取前端传递过来的数据的数据类型
    const reqType = req.headers['content-type']

// 定义一个GET路由
    if(method === 'POST' && path ==='/api/create'){
        let bodyStr = '';
        // 获取数据流,chunk是一段一段的数据
        req.on('data',chunk=>{
            // 连接数据(转换成字符串保存在bodyStr中)
            bodyStr += chunk.toString();
        })
        // 数据流接收完成
        req.on('end',()=>{
            // 如何把接收的json类型数据转换成json类型
            // 1.要判断前端传递的数据类型是否为json类型
            if(reqType === "application/json"){
                // 2.使用JSON.parse()转换
                const body = JSON.parse(bodyStr);
                console.log('body is',body );
            }
            res.end('接收完成')
        })
        // 如果命中此路由,则返回
        return;
    }

    // 如果没有命中路由,才会返回下面的
    res.writeHead(200,{'Content-type':'text/html'});
        res.end(
            `<DOCTYPE html>
            <html>
                <head>
                <title>404</title>
                </head>
                <body>
                404 Not found
                </body>
            </html>`
        )
})
// 监听端口
server.listen(3000);
console.log("正在监听3000端口,请访问http://localhost:3000")

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值