nodejs http模块

nodejs http模块

搭建一个简单的服务器
在搭建之前 需要知道的是http 的request和response 对象的基本参数
一、request

  • request.url: 获取到请求地址
  • request.headers: 获取到客户端请求的(http请求)头部信息
  • request.method: 获取到客户端请求的方式(get/post/…..)
  • request.httpVersion http的版本

二 、response

  • res.writeHead(200,{‘Content-type’:’text/html’,’content-length’:’100’});设置状态码和 MIME类型
  • res.statusCode = 200;//(设置zhuan)优先级比writeHead低
  • res.setHeader(‘content-type’,’text/html’);//优先级低于writeHead;
  • res.setEncoding(‘utf-8’);//设置服务端获取数据的编码
  • res.write(chunk,”utf-8”); 返回的数据,默认是 utf-8
  • res.on(‘data’,function(chunk){});//监听data事件 读取数据一般在接收文件时使用
  • res.on(‘end’,function(){});//监听end,数据执行完毕 执行end
  • res.on(‘error’,function(){});//读取文件出错触发此事件

接下来是解析get和post请求的URL

  1. get 方式
    使用的是url模块
    var url = require('url');
    var urls = url.parse(req.url,true);
    var name = url.query.name;
  1. post 方式
    最简单的做法是 传入json 然后使用JSON.parse();
            console.log(postData);   
            postData = JSON.parse(postData.toString());  
            console.log(postData.name);

全部代码(http.js):

const http = require("http");
const fs = require("fs");
const url = require("url");
const queryString = require("querystring");
var create = function (req, res) {
    res.statusCode = 200;//返回200状态码
    //res.setHeader("Content-Type",'text/plain') //text/plain 表示的是文字
    res.setHeader('content-type', 'text/html;charset=utf-8');
    var urlss = url.parse(req.url, true);
    var postData = [];
    if (req.method == "POST") {
        console.log("this is post method");
        req.on("data", function (chunk) {
            postData += chunk;
        });
        req.on("end", function () {
            //  var data = Buffer.concat(postData).toString(),ret;
            try {
                //var ret = JSON.parse(data);
                //  console.log(ret);
            } catch (err) {
                console.log(err);
            }
            console.log(postData);
            postData = JSON.parse(postData.toString());
            // postData = queryString.parse(postData);
            console.log(postData.name);
        })

    } else {
        console.log(urlss);
        console.log(urlss.query.name);
    }
    if (req.url !== '/favicon.ico') {
        let out = fs.createWriteStream("./log.txt");//创建一个写入流
        out.write(`请求方法:${req.method} \n`);
        out.write(`请求url:${req.url} \n`);
        out.write(`请求url参数Name:${url.toString()},pwd:${url.pwd} \n`);
        //第一个参数表示要转换为json的string字符串 ,第二个参数表示的是是否过滤包含在req.headers中的参数,
        //第三个参数仅仅是为了提高结果的可读性 插入多少个空白字符到过滤之后的json对象中,最大设置为 10
        out.write(`请求头对象:${JSON.stringify(req.headers, null, 1)}`);
        out.write(`请求http版本:${req.httpVersion}`);
        res.write("<h1>标题这是</h1>");
        res.end("hello world ");
    }

    //第一个参数是 连接状态码,第二个是mimi类型
    //res.writeHead(200,{'Content-type':'text/html','content-length':'100'})

}

http.createServer(create).listen(12345, () => {
    console.log("listen success")
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值