昭山欢node资料学习笔记
以前学过一片node工作没有用,忘了,趁这个春节在整理一片
第一章
快速塔建一个局哉网服务器
const http = require("http");
var server = http.createServer(function(req,res){
console.log('ok0');
res.end()
});
server.listen(3000,"192.168.1.113")
返回一个json
res.write("{'A':10}");
设置响应头
res.writeHead(200,{"Content-Type":"text/html;charset=UTF8"});
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
io 异步,凡是读文件的行为都会进入io操作,程序没有运行完被提前结束
示例1:
const http = require('http');
var server = http.createServer(function(a,b){
fs.readFile('./www'+req.url,function (err,data) {
if(err){
res.write(404)
}else{
res.write(data)
}
res.end()//res.end 放在这儿会读取完结束
})
//res.end().end()放在这儿文件还没有读完就执行到这儿了。提前终此程序
});
server.listen(80);
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
示例二:
凡是有读取文件的场所,都会进入io post发送也会当成数据段,
现在举例做一个静态文件的实例
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
原理是读取文件,读出文件的后缀名,根据文件后缀名返回数据类型
读取后缀名方法; path包有extname方法,使用方法:
var extname = path.extname(pathname);
读到方件设置后缀名初步想法做法是:
假设一个函数是生成后缀名
mime = getMime(extname)
res.writeHead(200,{"Content-Type":mime});
如查涉及到读json 生成json 会现读取文件成了异步,还没有读文件的时候就会返回undefig 解决方法回调函数
完整示例如下:
var http = require('http');
var fs = require("fs");
var url= require("url");
path = require("path");
var server = http.createServer(function(req, res){
var pathname = url.parse(req.url).pathname;
if(pathname.indexOf(".")== -1){
pathname += "/demo.html";
}
var fileUrl = "./" + path.normalize("./static/"+ pathname);
var extname = path.extname(pathname);
fs.readFile(fileUrl,function (err,data) {
if(err){
res.writeHead(404,{"Content-Type":"text/html;charset=UTF8"});
res.end("404");
}
getMime(extname,function (mime) {
res.writeHead(200,{"Content-Type":mime});
console.log(mime);
res.end(data);
})
});
});
server.listen(3000,"127.0.0.1");
function getMime(extname,callback){
fs.readFile("./mime.json",function (err,data) {
if(err){
throw Error("找不到mime.json");
return "text/html;";
}
var mimeJSON = JSON.parse(data);
var mime = mimeJSON[extname]||"text/plain"
callback(mime);
})
}
上传文件实战
原理利用 formidable
第一步安装formidable npm i formidable
第一步。实例化一个对象,对象打点parse 时就可以外理文件了,需要先设置上传路径,form.uploadDir = "./uploads";
var form = new formidable.IncomingForm();
//设置文件上传存放地址
form.uploadDir = "./uploads";
//执行里面的回调函数的时候,表单已经全部接收完毕了。
form.parse(req, function(err, fields, files) {
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
————————————————————————————————————————————————————————————————————————————————————————————————————————————
完整案例:
/**
* Created by Danny on 2015/9/20 15:35.
*/
var http = require("http");
var formidable = require('formidable');
var util = require("util");
var fs = require("fs");
var sd = require("silly-datetime");
var path = require("path"); //创建服务器
var server = http.createServer(function(req,res){
//如果你的访问地址是这个,并且请求类型是post
if(req.url == "/dopost" && req.method.toLowerCase() == "post"){
//Creates a new incoming form.
var form = new formidable.IncomingForm();
//设置文件上传存放地址
form.uploadDir = "./uploads";
//执行里面的回调函数的时候,表单已经全部接收完毕了。
form.parse(req, function(err, fields, files) {
//if(err){
// throw err;
//}
//console.log(util.inspect({fields: fields, files: files})); //时间,使用了第三方模块,silly-datetime
var ttt = sd.format(new Date(), 'YYYYMMDDHHmmss');
var ran = parseInt(Math.random() * 89999 + 10000);
var extname = path.extname(files.tupian.name);
//执行改名
var oldpath = __dirname + "/" + files.tupian.path;
//新的路径由三个部分组成:时间戳、随机数、拓展名
var newpath = __dirname + "/uploads/" + ttt + ran + extname; //改名
fs.rename(oldpath,newpath,function(err){
if(err){
throw Error("改名失败");
}
res.writeHead(200, {'content-type': 'text/plain'});
res.end("成功");
});
});
}else if(req.url == "/"){
//呈递form.html页面
fs.readFile("./form.html",function(err,data){
res.writeHead(200, {'content-type': 'text/html'});
res.end(data);
})
}else{
res.writeHead(404, {'content-type': 'text/html'});
res.end("404");
}
}); server.listen(80,"192.168.41.36");
ejs 模板使用案例
//加载模板
var ejs = require("ejs");
// 产生模板
var str = "vvvvvvvvvvvvvvvvvvvvvvvv<%= a %>";
// 数据对象
var data = {
a : 6
};
//调用render 学渲染
var html = ejs.render(str,data);
console.log(html);
console.log("ok");
————————————————————————————————————————————————————————————————————————
完整示例:如下
var ejs = require("ejs");
var fs = require("fs");
var http = require("http");
var server = http.createServer(function (req,res) {
fs.readFile("./static/hhh.ejs",function (err,data) {
var template = data.toString()
var dictionary = {a:6};
var html = ejs.render(template,dictionary);
res.writeHead(200,{"Content-Type":"text/html;charset=UTF8"});
console.log(html)
res.end(html);
})
});
server.listen(80,"127.0.0.1")
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
处理get 请求通常用url 模块
下面示例原理:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
var http = require('http');
//本功能示例演示get请求处理,原理是从:?分割 然后&在分,
// 然后利用obj[xx]=?方式增加在到对象
http.createServer(function(req,res){
var GET={};
if(req.url.indexOf('?')!= -1){
var arr = req.url.split('?');
var url = arr[0];
var arr2 = arr[1].split('&');
for(var i=0;i<arr2.length;i++){
//
var arr3 = arr2[i].split('=');
GET[arr[0]]=arr[1];
//类似于这样 get[a]=12
}
}
console.log(GET)
res.end();
}).listen(80,"127.0.0.1");
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
处理post 请求原理,通过数据段 += 将数据垒加在一起
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
示例代码!!!
var http = require('http');
http.createServer(function (req,res) {
var str="";
req.on('data',function (data) {
str +=data;
})
req.on('end',function(){
console.log(str)
});
res.end();
}).listen(80);
昭山欢node资料学习笔记的更多相关文章
- 一点感悟:《Node.js学习笔记》star数突破1000+
写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...
- Node.js学习笔记(3):NPM简明教程
Node.js学习笔记(3):NPM简明教程 NPM常用操作 更新NPM版本 npm install npm -g -g,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...
- 系列文章--Node.js学习笔记系列
Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- 简介及安装Node.js开发环境 Nodejs学习笔记(二)--- 事件模块 Nodejs学习笔记(三)--- 模块 Nodejs学 ...
- Node.js学习笔记(2):基本模块
Node.js学习笔记(2):基本模块 模块 引入模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在No ...
- Node.js学习笔记(1):Node.js快速开始
Node.js学习笔记(1):Node.js快速开始 Node.js的安装 下载 官方网址:https://nodejs.org/en/ 说明: 在Windows上安装时务必选择全部组件,包括勾选Ad ...
- Node.js学习笔记(4):Yarn简明教程
Node.js学习笔记(4):Yarn简明教程. 引入Yarn NPM是常用的包管理工具,现在我们引入是新一代的包管理工具Yarn.其具有快速.安全.可靠的特点. 安装方式 使用npm工具安装yarn ...
- Node.js学习笔记(一)
1.回调函数 node是一个异步事件驱动的平台,所以在代码中我们经常需要使用回调函数. 例: setTimeout(function(){ console.log('callback is calle ...
- Node.js学习笔记(一):快速开始
最近接了一个node项目,虽然最后顺利完成了,但是由于第一次实战,整个过程是赶出来的,许多地方一知半解.现在项目结束了,就静下心来系统地学一学,理一理,读书不忘拿笔,既然读书了,当然就要记点东西.一方 ...
- Node.js学习笔记(一)基础介绍
什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...
随机推荐
- Docker小白到实战之开篇概述
前言 "不对啊,在我这运行很正常啊",这句话小伙伴们在前几年应该听得很多:每次一到安装.部署时总有一堆问题,毕竟操作系统版本.软件环境.硬件资源.网络等因素在作怪,此时难免会导致开 ...
- MySQL:JDBC批量插入数据的效率
平时使用mysql插入.查询数据都没有注意过效率,今天在for循环中使用JDBC插入1000条数据居然等待了一会儿 就来探索一下JDBC的批量插入语句对效率的提高 首先进行建表 create tabl ...
- 记客户端出现Connect reset问题排查。
客户访问我们地址出现Connect reset. 网上查询说是服务端关闭,客户端还在读,就会出现Connect reset. 我们就排查为什么服务端会关闭. 网络的同事说收到了客户端的信息,但是被服务 ...
- Java课程设计 ssm电影售票选座管理系统 电影网站的网页设计与制作mysql
注意:此项目只截图部分功能,可评论区咨询查看项目全部功能演示 1.开发环境 开发语言:Java 后台框架:SSM(Spring+SpringMVC+Mybatis) 前端技术:HTML+CSS+Jav ...
- ACM学习笔记:二叉堆
title : 堆 date : 2021-8-3 tags : ACM,数据结构 什么是堆 堆是一棵具有特定性质的二叉树,堆的基本要求是堆中所有结点的值必须大于等于(或小于等于)其孩子结点的值,这也 ...
- MongoDB实例重启失败探究(大事务Redo导致)
1.实例重启背景 收到监控组同学反馈,连接某一个MongoDB实例的应用耗时异常,并且出现了超时.查看数据库监控平台,发现此实例服务器的IO异常飙升,而查看副本集状态(rs.status()),主从是 ...
- How to build your custom release bazel version?
一般情况下用源代码编译,生成的都是开发版本,这种版本做版本号校验方面会有很多问题,所以需要编译自己的release版本. export USE_BAZEL_VERSION=1.2.1 # 选择使用版本 ...
- Pikachu-暴力破解模块
一.概述 "暴力破解"是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取. 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果. 为 ...
- VsCode安装使用教程和插件安装方法
许多渗透方式都python写脚本,比较方便,写一下vscode和插件的安装办法,虽然不是很复杂,但是写一下做一下笔记: Visual Studio Code (简称 VS Code / VSC) 是一 ...
- 关于下载远程文件为未知文件.txt的解决方法
本地下载文件后缀正常,服务器下载文件后缀都为.txt的解决方法: 后缀为 未知文件.txt 的原因为前端无权限获取Content-Disposition中的文件名 response.setHeader ...