一、Node.js

1. Hello World

var  http  =  require('http');
http.createServer(function(request, response) {
response.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
if(request.url!=="/favicon.ico"){ //清除第2此访问
console.log('访问');
response.write('hello,world');
response.end('hell,世界');//不写则没有http协议尾,但写了会产生两次访问
}
}).listen(8000);
console.log('Server running at http://127.0.0.1:8000/'); /*
启动服务
cmd下执行:
node n1_hello.js
浏览器访问:http://localhost:8000
*/

2. 函数调用

//---服务器node.js---
var http = require('http');
var otherfun = require('./models/otherfuns.js');
http.createServer(function(request,response){
response.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
if(request.url!=="/favicon.ico"){ //清除第2此访问
fun1(response);
otherfun.controller(request,response);
otherfun.call(response);
//---使用字符串调用对应的函数---
funcname = "addContent"
otherfun[funcname](response);
otherfun['getVisit'](response);
response.end('');
}
}).listen(8000);
console.log('Server running at http://127.0.0.1:8000/');
//---普通函数---
function fun1(res){
res.write("你好,我是fun1");
}
//---/models/otherfuns.js---
function controller(req,res){
res.write("发送");
call('hello',req,res);
res.end("");
}
function call(res){
console.log('call');
}
module.exports = controller; //只支持一个函数
//只支持多个函数
module.exports={
getVisit:function(){
return visitnum++;
},
addContent:function(a,b){
return a+b;
}
}

3. 模块调用

//---node.js---
var http = require('http');
//var User = require('./models/User');
var Teacher = require('./models/Teacher');
http.createServer(function(request,response){
response.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
if(request.url!=="/favicon.ico"){ //清除第2此访问
//实例化teacher对象
teacher = new Teacher(1,'李四',30);
teacher.teach(response);
response.end('');
}
}).listen(8000);
//---User.js--
function User(id,name,age){
this.id=id;
this.name=name;
this.age=age;
this.enter=function(){
console.log("进入图书馆");
}
}
module.exports = User;
//---models/Teacher.js---
var User = require('./User');
function Teacher(id,name,age){
//没有构造方法,继承父类
User.apply(this,[id,name,age]);
this.teach=function(res){
res.write(this.name+"老师讲课");
}
}
module.exports = Teacher;

4. 路由

//---node.js---
var http = require('http');
var url = require('url');
var router = require('./router');
http.createServer(function(request,response){
response.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
if(request.url!=="/favicon.ico"){
//获取url的路径
var pathname = url.parse(request.url).pathname;
//替换掉路径前面的 /
pathname = pathname.replace(/\//,'');
router[pathname](request,response);
response.end('');
}
}).listen(8000);
//---router.js---
module.exports={
login:function(req,res){
res.write("我是login方法");
},
zhuce:function(req,res){
res.write("我是注册方法");
}
}

5. 文件读取

//---node.js---
var http = require("http");
var optfile = require("./models/optfile");
http.createServer(function(request,response){
response.writeHead(200,{'Content-Type':'text/html';charset=utf-8'});
if(request.url!=="/favicon.ico"){
//闭包函数;防止异步操作时,已经end了,再进行write报错
function recall(data){
response.write(data);
response.end('ok')
}
optfile.readfile('./views/login.html',recall);
console.log('主程序执行完毕');
}
}).listen(8000)
//---/models/optfile---
var fs = require('fs');
module.exports={
//同步读取
readfileSync:function(path){
var data = fs.readFileSync(path,'utf-8');
console.log("同步方法执行完毕");
return data;
},
//异步读取
readfile:function(path,recall){
fs.readFile(path,function(err,data){
if(err){
console.log(err);
}else{
console.log(data.toString());
recall(data);
}
})
}
}
//---修改后路由---
//---node.js---
var http = require('http');
var url = require('url');
var router = require('./router');
var optfile = require("./models/optfile");
http.createServer(function(request,response){
response.writeHead(200,{'Content-Type':'text/html';charset=utf-8'});
if(request.url!=="/favicon.ico"){
//获取url的路径
var pathname = url.parse(request.url).pathname;
//替换掉路径前面的 /
pathname = pathname.replace(/\//,'');
router[pathname](request,response);
console.log('主程序执行完毕');
}
}).listen(8000)
//---router.js---
var optfile = require("./models/optfile");
module.exports={
login:function(req,res){
function recall(data){
res.write(data);
res.end("");
}
optfile.readfile('./views/login.html',recall);
},
zhuce:function(req,res){
function recall(data){
res.write(data);
res.end("");
}
optfile.readfile('./views/zhuce.html',recall);
}
}

6. 文件写入

//---node.js---
var http = require('http');
var url = require('url');
var router = require('./router');
var optfile = require("./models/optfile");
http.createServer(function(request,response){
response.writeHead(200,{'Content-Type':'text/html';charset=utf-8'});
if(request.url!=="/favicon.ico"){
//获取url的路径
var pathname = url.parse(request.url).pathname;
//替换掉路径前面的 /
pathname = pathname.replace(/\//,'');
router[pathname](request,response);
console.log('主程序执行完毕');
}
}).listen(8000)
//---/models/optfile---
var fs = require('fs');
module.exports={
//同步写入
writefileSync:function(path,data){
fs.writeFileSync(path,data);
console.log("同步方法执行完毕");
},
//异步读取
writefile:function(path,data,recall){
fs.writeFile(path,data,function(err){
if(err){
throw err;
}else{
console.log("It is saved!");
recall('写文件成功')
}
})
}
}
//---router.js---
var optfile = require("./models/optfile");
module.exports={
login:function(req,res){
function recall(data){
res.write(data);
res.end("");
}
optfile.readfile('./views/login.html');
},
writefile:function(req,res){
function recall(data){
res.write(data);
res.end("");
}
optfile.writefile('./views/one.txt','hello world',recall);
}
}

7. 读取图片

//---node.js---
var http = requrie('http');
var optfile = require('./models/optfile');
http.createServer(function(request,response){
//读取图片需要时二进制流格式
response.writeHead(200,{'Content-Type':'image/jpeg'});
if(request.url!='/favicon.ico'){
optfile.readImg('./imgs/pig.png',response);
}
}).listen(8000);
//---/models/optfile---
var fs = require('fs');
module.exports={
readImg:function(path,res){
//默认为string,binary是二进制
fs.readFile(path,'binary',function(err,filedata){
if(err){
console.log(err);
return;
}else{
res.write(filedata,'binary');
res.end();
}
})
}
}

8. 异常处理

//同步捕获异常
pathname = url.parse(request.url).pathname;
pathname = pathname.replace(/\//,'');
try{
router[pathname](request,response);
}catch(err){
console.log("error="+err);
response.writeHead(200,{'Content-Type':'text/html';charset='utf-8'});
response.write(err.toString());
response.end('');
}
//---node.js---
var http = require('http');
var url = require('url');
var router = require('./router');
var exception = require('./models/Exception');
http.createServer(function (request,response){
if(request.url!=="/favicon.ico"){//清除第2此访问
pathname=url.parse(request.url).pathname;
pathname = pathname.replace(/\//,'');//替换掉前面的/
try{
//router[pathname](request,response);
data = exception.expfun(0);
response.write(data);
response.end('');
}catch(err){
console.log('aaaaa='+err);
response.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
response.write(err.toString());
response.end('');
}
console.log("server执行完毕");
}
}).listen(8000);
//---Exception.js---
module.exports={
expfun:function(flag){
if(flag==0){
//抛出异常
throw '我是例外';
}
return "success";
}
}

9. 参数接收

<form action='./login' method='get'>
<input type='text' name='email'/>
<input type='password' name='pwd'/>
<input type='submit' value='登录'>
</form>
//---node.js---
var http = require('http');
var url = require('url');
var router = require('./router');
http.createServer(function(request,response){
if(request.url!=="/favicon.ico"){ //清除第2此访问
pathname=url.parse(request.url).pathname;
pathname = pathname.replace(/\//,'');//替换掉前面的/
try{
router[pathname](request,response);
}catch(err){
console.log('出错='+err);
response.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
response.write(err);
response.end('');
}
console.log("server执行完毕");
}
}).listen(8000);
//---router.js--
var optfile = require('./models/optfile');
var url = require('url');
var querystring = require('querystring'); //post需导入
module.exports={
login:function(req,res){
//--------get方式接收参数----------------
var rdata = url.parse(req.url,true).query;
console.log(rdata);
if(rdata['email']!=undefined){
console.log(rdata['email']);
} //-------post方式接收参数----------------
var post = '';//定义了一个post变量,用于暂存请求体的信息
//通过req的data事件监听函数,每当接受到请求体的数据,就累加到post变量中
req.on('data', function(chunk){
post += chunk;
}); //-------注意异步-------------
//在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。
req.on('end', function(){
post = querystring.parse(post);
console.log('email:'+post['email']+'\n');
console.log('pwd:'+post['pwd']+'\n');
});
//---------------------------------------
data = optfile.readfileSync('./views/login.html');
res.write(data);
res.end();
}
}

Node.js—学习的更多相关文章

  1. NODE.JS学习的常见误区及四大名著

    NODE.JS学习的常见误区及四大名著 前段时间由于不满于社区里很多人对于NODE.JS的种种误解而写了一篇文章名为: NODE.JS之我见:http://www.cnblogs.com/pugang ...

  2. Node.js学习系列总索引

    Node.js学习系列也积累了一些了,建个总索引方便相互交流学习,后面会持续更新^_^! 尽量写些和实战相关的,不讲太多大道理... Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- ...

  3. 【入门必备】最佳的 Node.js 学习教程和资料书籍

    Web 开发人员对 Node.js 的关注日益增多,更多的公司和开发者开始尝试使用 Node.js 来实现一些对实时性要求高,I/O密集型的业务.这篇文章中,我们整理了一批优秀的资源,你可以得到所有你 ...

  4. node.js学习(1)

    新建便笺 3 node.js学习(1) 1)安装 http://nodejs.org/download/下载. 2)编写一个案例 var http=require("http"); ...

  5. 我的Node.js学习历程

    学习一门技术,每个人都有每个人的方法.我的方法很简单,做项目. 基本概念 在搭建一个node网站之前,还是要掌握一些基本的概念的,这里列举一下,具体的内容大家自己到网上去查: npm bower ex ...

  6. Node.js学习之TCP/IP数据通讯

    Node.js学习之TCP/IP数据通讯 1.使用net模块实现基于TCP的数据通讯 提供了一个net模块,专用于实现TCP服务器与TCP客户端之间的通信 1.1创建TCP服务器 在Node.js利用 ...

  7. Node.js学习起步

    Node.js学习: 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台.Node.js是一个事件驱 ...

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

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

  9. Node.js学习看这里:基础、进阶、文章

    Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快速的.可扩展的网络应用. Node.js采用事件 ...

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

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

随机推荐

  1. CodeForces 862B(思维+二分图染色)

    题意 https://vjudge.net/problem/CodeForces-862B 给出n个点,n-1条边,求再最多再添加多少边使得二分图的性质成立 思路 因为题目是求的最多添加多少边,所以可 ...

  2. 纯CSS实现自动轮播,CSS变量的定义与使用,计算属性的使用

    先来看一下实现的效果: 实现原理: HTML中使用ul>li存放图片 CSS使用CSS3的animation来完成动画 <!-- HTML --> <section class ...

  3. 关闭Chrome浏览器的广告

    生活没有绝对的对与错:代码就不一样了,错了就编译不过,也正是因为这样,编程的人思维有时也会陷入一种狭隘中,这就是把工作和生活没有分开.Win10 右下角的广告就像程序调试中的"警告" ...

  4. RMAN详细教程(四):备份脚本实战操作

    RMAN详细教程(一):基本命令代码 RMAN详细教程(二):备份.检查.维护.恢复 RMAN详细教程(三):备份脚本的组件和注释 RMAN详细教程(四):备份脚本实战操作 1.为了安全起见,先将数据 ...

  5. leetcode一刷总结,明天二刷

    1:基础的数据结构:图掌握极差,二叉树次之 2:常用的算法思想:dp,深度有先,广度优先等等. 3:优化以解决的题目,注意思想的总结 4:将约150道题都刷掉 5:优先解决设计算法思想的题目类别,其次 ...

  6. ExtJS布局控件

    Layout Controls Auto Layout Ext JS4中的容器的默认布局是自动布局.这个布局管理器会自动地将组件放在一个容器中. Fit Layout Fit布局安排了容器的内容完全占 ...

  7. 自定义异常类;键盘输入;try catch用法

    相关考点:自定义异常类:键盘输入:try catch用法 1.设计一个java程序,自定义一个异常类,从键盘输入一个字符串,如果等于“abc”,则抛出异常. public class MyExcept ...

  8. rxJava2.x源码解析

    一. Rxjava是什么 Rxjava在GitHub的介绍是 "A library for composing asynchronous and event-based programs u ...

  9. powershell 提取 spotlight 图片

    powershell脚本来源于网络,有一些调整. # 将复制出来的缓存图片保存在下面的文件夹 $dir = Split-Path -Parent $MyInvocation.MyCommand.Def ...

  10. Serlvet、JSP和JSTL的联系

    没有无缘无故的爱和恨,没有无缘无故的编程 前言: 想这世间,没有无缘无故的爱,也没有无缘无故的恨,一切都有有原因的,我想编程亦是如此,技术时常更新,程序员时常学习,随着时间的推移,程序员发际线的增高, ...