以前学过一片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资料学习笔记的更多相关文章

  1. 一点感悟:《Node.js学习笔记》star数突破1000+

    写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...

  2. Node.js学习笔记(3):NPM简明教程

    Node.js学习笔记(3):NPM简明教程 NPM常用操作 更新NPM版本 npm install npm -g -g,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...

  3. 系列文章--Node.js学习笔记系列

    Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- 简介及安装Node.js开发环境 Nodejs学习笔记(二)--- 事件模块 Nodejs学习笔记(三)--- 模块 Nodejs学 ...

  4. Node.js学习笔记(2):基本模块

    Node.js学习笔记(2):基本模块 模块 引入模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在No ...

  5. Node.js学习笔记(1):Node.js快速开始

    Node.js学习笔记(1):Node.js快速开始 Node.js的安装 下载 官方网址:https://nodejs.org/en/ 说明: 在Windows上安装时务必选择全部组件,包括勾选Ad ...

  6. Node.js学习笔记(4):Yarn简明教程

    Node.js学习笔记(4):Yarn简明教程. 引入Yarn NPM是常用的包管理工具,现在我们引入是新一代的包管理工具Yarn.其具有快速.安全.可靠的特点. 安装方式 使用npm工具安装yarn ...

  7. Node.js学习笔记(一)

    1.回调函数 node是一个异步事件驱动的平台,所以在代码中我们经常需要使用回调函数. 例: setTimeout(function(){ console.log('callback is calle ...

  8. Node.js学习笔记(一):快速开始

    最近接了一个node项目,虽然最后顺利完成了,但是由于第一次实战,整个过程是赶出来的,许多地方一知半解.现在项目结束了,就静下心来系统地学一学,理一理,读书不忘拿笔,既然读书了,当然就要记点东西.一方 ...

  9. Node.js学习笔记(一)基础介绍

    什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...

随机推荐

  1. 100的累加和 for循环

    1 int main() 2 { 3 int sum ; 4 int i; 5 for(i = 0; i<101; i++) 6 { 7 sum += i; 8 } 9 printf(" ...

  2. 字节跳动上传了一份“面试官版Android面试小册”,不讲一句废话,全是精华

    前言 金三银四马上就到了,很多粉丝朋友私信希望我出一篇面试专题或者分享面试相关的笔记来学习,这不今天就给大家安排上了?(都是干货,错过就是亏.) 下面的面试笔记都是精心整理好免费分享给大家的,希望新朋 ...

  3. 清晰易懂的RxJava入门实践

    导入 我相信大家肯定对ReactiveX 和 RxJava 都不陌生,因为现在只要是和技术相关的网站,博客都会随处见到介绍ReactiveX和RxJava的文章. ReactiveX Reactive ...

  4. Salesforce Integration 概览(六) UI Update Based on Data Changes(UI自动更新基于数据变更)

    Salesforce用户界面必须由于Salesforce数据的更改而自动更新.这个场景其实在我所经历的项目中用到的不是特别多,因为客户可能直接点击刷新按钮就直接看到了最新的数据,而不是那种一直不刷新然 ...

  5. Run Clojure Script with External Dependencies without leiningen

    The normal way of deploy clojure files is using leiningen. But if we have no leiningen, or the scrip ...

  6. 跟我一起写 Makefile(四)

    书写规则 ---- 规则包含两个部分,一个是依赖关系,一个是生成目标的方法. 在Makefile中,规则的顺序是很重要的,因为,Makefile中只应该有一个最终目标,其它的目标都是被这个目标所连带出 ...

  7. 0基础学小程序----day2

    目录结构的三部分如上 下来我们看看  框架全局文件 app.js小程序逻辑 再看app.json 小程序公共设置可以对五个功能进行设置 我们再来逐一看看 页面路径那里  你建个路径,他会自动生成文件夹 ...

  8. MATLAB—常用控制流

    文章目录 一.MATLAB控制流与C语言的区别 二.if-else-end 判断 1.使用方法 2.例题 三.switch-case 分支 1.使用方法 2.例题 四.for.while循环 1.使用 ...

  9. C#序列化和反序列化 之 dynamic 动态Json的反序列化

    序列化和反序列化的常识不再赘述,如果不清楚这个,可以 参考一下其他人写的文章https://www.cnblogs.com/maitian-lf/p/3670570.html 总结的说, 序列化 是把 ...

  10. Jmeter教程 录制脚本

    Jmeter 录制脚本 Jmeter中有2种方法可以录制脚本.  不过我个人非常不推荐录制脚本,录制的脚本混乱,需要再次加工才能使用. 像我这么精通HTTP协议的人. 一直都是使用Fiddler来抓包 ...