以前学过一片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. 刷了无数大厂Android研发岗面试题,其实考的无非是这 3 点能力

    前言 发现一个有趣的现象,似乎程序员们对面试题总是抱有热情,多看几道面试题,自己的面试能力就可以提高一点. 作为一个研发工程师,看过很多公司的面试题,也参与过很多公司的面试,发现大厂的面试题更加具有代 ...

  2. 实战爬取拷背漫画-Python

    ​  一.抓包获取链接 以爬取<前科者>为例 获取搜索链接 https://api.copymanga.com/api/v3/search/comic?limit=5&q=前科者 ...

  3. 【Java】jeesite初始配置以及代码生成工具的使用

    jeesite简单使用 首先去技术服务与支持.版本区别一览表 - JeeSite 4.x找到源码下载的部分 JeeSite 源码下载:https://gitee.com/thinkgem/jeesit ...

  4. 遗传算法Genetic Algorithm

    遗传算法Genetic Algorithm 好家伙,回回都是这个点,再这样下去人估计没了,换个bgm<夜泊秦淮>,要是经典咏流传能投票选诗词,投票选歌,俺一定选这个 开始瞎叨叨 遗传算法的 ...

  5. Linux学习手册

    入门概述 Linux 简介 Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的. Linux 是一套免费使用和自由传播的类 Unix ...

  6. mybaits进阶01

    在以上mybait入门的改进(增加了接口让增删改查 后期跟容易) 注意:主配置文件和映射配置文件内容不变,但是映射文件要和对应接口放于同目录下并且名称必须相同 一.接口创建 public interf ...

  7. 【TS】学习总结

    [TS]学习总结 01-TypeScript编译环境 TypeScript全局安装 npm install typescript -g tsc --version //查看版本,安装成功 TypeSc ...

  8. WinForm嵌入Web网页的解决方案

    企业级信息化系统绝大部分采用BS架构实现,如门户网站.OA系统.电商网站等,通过浏览器输入Web网址即可访问,对于使用者来说非常便捷,对于开发维护者来说也非常方便,程序维护只需更新服务器即可,使用者无 ...

  9. NOIP 模拟 $25\; \rm string$

    题解 \(by\;zj\varphi\) 考虑对于母串的每个字符,它在匹配串中有多少前缀,多少后缀. 设 \(f_i\) 表示 \(i\) 位置匹配上的前缀,\(g_i\) 为后缀,那么答案为 \(\ ...

  10. noip 模拟 6

    果然考试一多就改不过来了 考试经过 上来看题,T1似乎是一个计数题,但看见1e9的数据范围就觉得不可做,拿了20部分分匆忙跑路 T2是个图论题,不过一看统计种类就发现是自己不会的东西,瞄准30分冲了一 ...