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
- get 方式
使用的是url模块
var url = require('url');
var urls = url.parse(req.url,true);
var name = url.query.name;
- 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")
});