http模块
- 可以通过 Nodejs提供的
http模块
,我们可以快速的构建一个web服务器, - 需要手动引入这个模块
- 通过HTTP模块实现服务器功能步骤
- 1.导入HTTP模块
- 2.创建服务器实例对象
- 3.绑定请求事件
- 4.监听指定端口请求
let http = require("http");
//2.创建服务器对象
let server = http.createServer();
//3.注册监听事件
server.on("request",function (req, res) {
// writeHead方法的作用: 告诉浏览器返回的数据是什么类型的, 返回的数据需要用什么字符集来解析
res.writeHead(200, {
"Content-Type": "text/plain; charset=utf-8"
});
//end方法的作用是: 结束本次请求并且返回数据
res.end("www.ezcarry.com,哈哈哈");
});
//4.监听端口
server.listen(3000);
只要本地的 web服务对应的端口是3000就监听到
http模块中的路由(路径分发)
- 路径分发也称之为
路由
, 就是根据不同的请求路径返回不同的数据
- 通过请求监听方法中的
request对象
, 可以获取到当前请求的路径
,根据不同的请求路径返回不同的数据
- request的本质是http.IncomingMessage类的实例,
req.url
- response对象其实是http.ServerResponse 类的实例,
- request的本质是http.IncomingMessage类的实例,
//1.导入模块
let http = require("http");
//2.创建服务器对象
let server = http.createServer();
//3.注册监听事件
/*
request的本质是http.IncomingMessage类的实例
response对象其实是http.ServerResponse 类的实例
*/
server.on("request",function (req, res) {
console.log(req.url);
// writeHead方法的作用: 告诉浏览器返回的数据是什么类型的, 返回的数据需要用什么字符集来解析
res.writeHead(200, {
"Content-Type": "text/plain; charset=utf-8"
});
// startsWith 方法检测 字符串是否 包含 子串
if (req.url.startsWith("/index")){
//end方法的作用是: 结束本次请求并且返回数据
//注意点:end方法来返回数据,那么只会返回一次
// res.end("www.ezcarry.com,首页");
//通过write方法 返回数据, 不会结束本次请求,必须要收到结束请求
res.write("首页1111");
res.end();
}else if (req.url.startsWith("/login")) {
res.end("登陆测试");
}else {
res.end("没有数据---");
}
});
//4.监听端口
server.listen(3000);
http模块加载静态资源
- 在加载
图片
的资源是不能写utf8
,不能的资源类型时对应不同的相应头 - 如果服务器在响应数据的时候没有指定响应头, 那么在有的浏览器上, 响应的数据有可能无法显示
let http = require("http");
let fs = require("fs");
let path = require("path");
//加载js,json出来的都是 js的实例对象
let mine = require("./mime");
//创建服务器对象
let server = http.createServer();
//监听相应请求
server.on("request",function (req,res) {
//拼接文件路径
let filePath = path.join(__dirname,"www",req.url);
/*
注意点:
1.加载其它的资源不能写utf8
2.如果服务器在响应数据的时候没有指定响应头, 那么在有的浏览器上, 响应的数据有可能无法显示
* */
let extname = path.extname(filePath);
//判断有没有加载文件资源
if (extname === ""){
res.end("server error");
return;
}
let type = mine[extname];
console.log(type);
if (type.startsWith("text")){
type += "; charset=utf-8;";
}
//设置相应头
res.writeHead(200,{
"Content-Type": type
});
//读取文件
fs.readFile(filePath,function (err,data) {
if (err){
res.end("server error");
}
res.end(data);
})
});
server.listen(3000);
image.png
image.png需要注意的是: 代码是 mine是一个文件 里面存放是json对象,
对应了 不同格式的资源 对应的 不同的相应头的名称
,比如:".html": "text/html",
,".jpg": "image/jpeg",
URL模块
- 需要收到导入
// 80是端口
//#banner 是哈希值
let urlStr = "http://root:123456@www.ezcarry.com:80/index.html?name=TT&age=68#banner";
//url转化为对象
//参数二; query转化为对象
let obj = url.parse(urlStr,true);
console.log(obj);
console.log(obj.query.name);
image.png
post请求的参数处理
/*
1.如何拿到POST请求传递过来的参数
使用querystring模块
querystring.parse(str[, sep[, eq[, options]]]) 将参数转换为对象
querystring.stringify(obj[, sep[, eq[, options]]]) 将对象转换为参数
*/
//导入模块
let http = require("http");
//这个模块用于 解析和格式化 URL 查询字符串的实用工具
let querystring = require('querystring');
let server = http.createServer();
server.on("request",function (req,res) {
//1.定义变量保存传递过来的参数
let params = "";
//注意点:在node.js中,post请求的参数我们不能一次性拿到,必须分批获取
//开始获取参数
req.on("data",function (el) {
params += el;
});
//结束
req.on("end",function () {
console.log(params);
//解析url字符串
let obj = querystring.parse(params);
console.log(obj);
});
res.end("提交成功");
});
server.listen(3000);
网友评论