node入门http
2017-10-17 本文已影响3人
圆心角
自己的了解领域是node有http 和 app 两个模块
首先 http端
http模块:负责web服务器相关任务的模块
模块:把各种功能划分在模块中,通过模块编写相关代码
1、引入http模块
var http = require("http");
然后创建服务
//node.js
var server = http.createServer(function(req, res){
res.end('hello world');
}
server.listen('9090')
直接在git上面输入node node1.js(前提是在当前文件打开git) 在谷歌中输入localhost:9090 就能看到效果
req和res参数
req参数: 请求对象,从客户端发到服务器中的请求信息存放在这个对象中
res参数: 响应对象,需要返回给客户端的信息要放在这个对象中
我们可以通过req.url和req.method分别拿到请求的路径和请求参数
请求路径
// console.log(req.url); 通常是端口号后的 例如:index.html
//请求方式
// console.log(req.method) GET 或者POST
下面写一个小小的客户端请求服务端页面的过程
首先我先把能用到的木块进行require
//demo.js
//1、引入http模块
var http = require("http");
//2、引入url模块
var url = require("url");
//3、引入常用工具util模块
var util = require("util");
//4、引入querystring模块
var querystring = require("querystring");
然后写一下返回给客户端的html页面
var backHTML =
'<html><head><meta charset="utf-8"><title>小案例</title></head>' +
'<body>' +
'<form method="post">' +
'账号: <input name="username"><br>' +
'密码: <input name="passwd"><br>' +
'<input type="submit" value="提交">' +
'</form>' +
'</body></html>';
接着创建服务
var server = http.createServer(function(req,res) {
})
server.listen('9091)
下面在服务里写内容
默认情况下客户端向服务端发送的请求是GET,如果服务端标明要求客户端请求的时候必须是post请求 那客户端只能通过post方式进行请求,所以我们要判断客户端的请求方式
里面有几个点先说一下
//返回请求文件的类型 每一个返回的文件都应该有他自己的类型,所以这个在每一个成功返回的条件下都应该存在
res.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8'});
//返回数据 返回的写在write里面
res.write()
//获取客户端传递的数据 parse
http://localhost:9091/index.html?username=shang&passwd=666
var info = url.parse(req.url, true);
info是一个对象,里面存放很多键值对,端口号后面的参数是放在一个key为query的里面,如下图info 就是图中的Url
var parmars = info.query; 就能拿到参数了
//将对象转换为字符串 inspect:将对象转成字符串
var infoStr = util.inspect(info);
query
var server = http.createServer(function(req,res) {
if(req.method == "GET") {
//先判断请求的是哪个文件 / 表示所有的文件都可以 通常为了方便我们都用/
if(req.url == '/') {
res.writeHead(200, {'Content-Type':'text/html;charset = utf-8'})
res.write(postHtml)
res.end();
//我就很不理解,如果这里成功了为什么还会走下面的else ,但这样是对的,也许另有深意
} else {
var info = url.parse(req.url, true);
var infoStr = util.inspect(info);
res.writeHead(200, {'Content-Type':'text/plain;charset = utf-8'})
var parmars = info.query;
res.write('名称' + parmars.username);
res.write('\n');
res.write('编号' + parmars.id);
res.write('\n');
res.end();
}
} else {
//上面的是GET请求 接下来是post请求
/* POST 请求的内容全部的都在请求体中,
http.ServerRequest 并没有一个属性内容为请求体,
原因是等待请求体传输可能是一件耗时的工作。
比如上传文件,而很多时候我们可能并不需要理会请求体的内容,
恶意的POST请求会大大消耗服务器的资源,所有node.js 默认是不会解析请求体的,
当你需要的时候,需要手动来做。*/
// 定义了一个body变量,用于暂存请求体的信息
var body = "";
// 通过req的data事件监听函数,每当接受到请求体的数据,就累加到body变量中
req.on("data", function(chun){
body += chun;
});
// 通过req的end事件监听函数,获取客户端传递的信息
req.on("end", function(){
// 解析参数 querystring.parse(body)
body = querystring.parse(body);
res.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8'});
res.write("账号:"+body.username);
res.write("\n");
res.write("密码:"+body.passwd);
res.write("\n");
res.end();
})
}
})
然后服务端运行node demo.js
客户端运行localhost:9091