nodejs学习01
安装
参考:
注意: 最新版本不支持win7有问题,我win7 用的 node-v11.15.0-win-x86
历史版本下载:https://registry.npmmirror.com/binary.html?path=node/
初识
新建http server 并运行。
1. 新建文件 HttpServer03.js, 写入。
2. 命令行输入 node HttpServer03.js
const http = require('http'); const port = 8080; var hostname = '127.0.0.1'; const server = http.createServer((req, res) => { let body = []; req.on('data', (chunk) => { body.push(chunk) // 将接收到的数据暂时保存起来 }); req.on('end',()=>{ if(req.method === 'GET'){ res.write('GET\n'); }else if(req.method === 'POST'){ res.write('POST\n'); } res.end("Hello world!" + " " +body.toString()); }); }) server.listen(port, () => { console.log(`服务器运行在 http://${hostname}:${port}/`); });
注意:
1. 命令行 ctrl + c 停止服务
2. 当服务启动后,更新代码 必须重启服务才能生效
3. 响应内容中文乱码的解决办法
response.setHeader('content-type','text/html;charset=utf-8');
4. 端口号被占用
Error: listen EADDRINUSE: address already in use :::9000
1)关闭当前正在运行监听端口的服务 ( 使用较多 )
2)修改其他端口号
5. HTTP 协议默认端口是 80 。HTTPS 协议的默认端口是 443, HTTP 服务开发常用端口有 3000,8080,8090,9000 等。
如果端口被其他程序占用,可以使用 资源监视器 找到占用端口的程序,然后使用 任务管理器 关闭对应的程序。
HTTP
获取 HTTP 请求报文
想要获取请求的数据,需要通过 request 对象
例子:
//1、引入http模块 const http = require("http"); //2、建立服务 const server = http.createServer((request,response)=>{ let {url,method} = request; //对象的解构赋值 //设置响应头信息 //解决中文乱码 response.setHeader("Content-Type","text/html;charset=utf-8") if(url == "/register" && method == "GET"){ response.end("注册页面"); }else if(url=="/login" && method == "GET"){ response.end("登录页面"); }else{ response.end("<h1>404 Not Found</h1>") } }); //3、监听端口 server.listen(8000,()=>{ console.log('port:8000,服务启动中....'); });
设置 HTTP 响应报文
write 和 end 的两种使用情况:
//write 和 end 的两种使用情况: //1. write 和 end 的结合使用 响应体相对分散 response.write('xx'); response.write('xx'); response.write('xx'); response.end(); //每一个请求,在处理的时候必须要执行 end 方法的 //2. 单独使用 end 方法 响应体相对集中 response.end('xxx');
资源类型(mime类型)
媒体类型(通常称为 Multipurpose Internet Mail Extensions 或 MIME 类型 )是一种标准,用来表示文档、文件或字节流的性质和格式。
mime 类型结构: [type]/[subType]
例如: text/html text/css image/jpeg image/png application/json
HTTP 服务可以设置响应头 Content-Type 来表明响应体的 MIME 类型,浏览器会根据该类型决定如何处理资源
下面是常见文件对应的 mime 类型
html: 'text/html', css: 'text/css', js: 'text/javascript', png: 'image/png', jpg: 'image/jpeg', gif: 'image/gif', mp4: 'video/mp4', mp3: 'audio/mpeg', json: 'application/json'
对于未知的资源类型,可以选择 application/octet-stream 类型,浏览器在遇到该类型的响应时,会对响应体内容进行独立存储,也就是我们常见的 下载 效果
例子:
require('http').createServer((request,response)=>{ //获取请求的方法已经路径 let {url,method} = request; //判断请求方式以及请求路径 if(method == "GET" && url == "/index.html"){ //需要响应文件中的内容 let data = require('fs').readFileSync(__dirname + '/index.html'); response.end(data); }else if(method == "GET" && url == "/css/app.css"){ //需要响应文件中的内容 let data = require('fs').readFileSync(__dirname + '/public/css/app.css'); response.end(data); }else if(method == "GET" && url == "/js/app.js"){ //需要响应文件中的内容 let data = require('fs').readFileSync(__dirname + '/public/js/app.js'); response.end(data); }else{ //404响应 response.statusCode = 404; response.end("<h1>404 Not Found</h1>"); } }).listen(80,()=>{ console.log('80端口正在启动中....'); }) // 优化为 require('http').createServer((request,response)=>{ //获取请求的方法已经路径 let {url,method} = request; //文件夹路径 let rootDir = __dirname + '/public'; //拼接文件路径 let filePath = rootDir + url; //读取文件内容 fs.readFile(filePath,(err,data)=>{ //判断 if(err){ //如果出现错误,响应404状态码 response.statusCode = 404; response.end('<h1>404 Not Found</h1>'); }else{ //响应文件内容 response.end(data); } }) }).listen(80,()=>{ console.log('80端口正在启动中....'); })
GET 和 POST 请求场景小结
GET 请求的情况:
- 在地址栏直接输入 url 访问
- 点击 a 链接
- link 标签引入 css
- script 标签引入 js
- img 标签引入图片
- form 标签中的 method 为 get (不区分大小写)
- ajax 中的 get 请求
POST 请求的情况:
- form 标签中的 method 为 post(不区分大小写)
- AJAX 的 post 请求
GET和POST请求的区别
GET 和 POST 是 HTTP 协议请求的两种方式。
GET 主要用来获取数据,POST 主要用来提交数据
GET 带参数请求是将参数缀到 URL 之后,在地址栏中输入 url 访问网站就是 GET 请求,
POST 带参数请求是将参数放到请求体中
POST 请求相对 GET 安全一些,因为在浏览器中参数会暴露在地址栏
GET 请求大小有限制,一般为 2K,而 POST 请求则没有大小限制
常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。
昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。