Node.js 原生基础学习01

首先来一个官宣,Node是一个让JavaScript运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。它发布于2009年5月,由RyanDahl开发,实质是对ChromeV8引擎进行了封装。

Node.js的概况


有了Node.js发展变化后,前端工程师可以做到像PHP一样的后端增删改查甚至读写数据库等。它之前,适合运用在高并发、非阻塞I/O、少量业务逻辑的场景。可以这样理解成:淘宝商家一个店铺网站,有活动时并发量很高,会容易导致打不开卡顿。

首先,在PHP、Java或.NET等后端语言,会给每一个客户端连接创建一个新线程,理论上每个线程消耗2MB内存。那么一个服务器有8G内存情况下,同时连接数并发个数达到4000左右。要让并发达到更多情况下,就要升级服务器硬件了,成本你是明白的。所以产生了一个服务器8G内存情况下,Node.js同时处理4万左右用户连接。

所以,Node.js开发周期短,开发和学习成本,花最少的钱来追求高并发和处理性能。

学习计划

  • 1 学习ES6基本语法
  • 2 Node.js 安装和开发环境
  • 3 Node.js 原生语法、模块学习
  • 4 Node.js 简单的留言本开发
  • 5 Node.js koa+art-template+NoSql学习
  • 6 Node.js 开发CMS内容管理系统
  • 7 生产环境安装和技巧

学习ES6基本语法

Js声明变量

var name = "全端观察";  //给自定义变量
document.write(name);  //打印在页面
console.log(name);     //使用 console.log() 写入到浏览器的控制台 这是node.js开发过程中经常使用的判断方法

以上是最基本语法,以下变量ES6语法 , Let 和 Var 本质一样的,但Let只能在块级有效。

let name = "全端观察";
console.log(name); //打印浏览器控制台
function word(){
    let webname = "全端观察是个好网站";
    console.log(webname); //在块级有效
}
word();  //输出方法下的consle.log
console.log(webname); //无法输出。

上面代码不明白还就可以简化理解:

if(true){
    let webname = "全端观察是个好网站";
}
console.log(webname); //无法输出,所在只能在块级有效

生命变量还有const方法,只能保值1个值,不能修改。

const name = '全端观察';
name = '我想把全端观察改前端';
console.log(name); //报错 第二个name修改后无法读取

模板字符串

var name = "全端观察";
console.log(name + '是个好网站'); //var写法
   let name = "全端观察";
   let content = "而且初级免费学习的。";
   console.log(`${name}是个好网站` + `${content}`);  //es6写法,注意单引号

方法简写

var name = '全端观察是一个方法';
var app ={
    name:name
}   
console.log(app.name); //普通写法
let name = '全端观察是一个方法';
let app ={
    name
}   
console.log(app.name); //ES6简写
let name = '全端观察是一个方法';
let app ={
    name,
    go:function(){
        console.log(`${name},所以尽快学习!`);
    }
}   
app.go();
更简写:
let name = '全端观察是一个方法';
let app ={
    name,
    go(){
        console.log(`${name},所以尽快学习!`);
    }
}   
app.go(); //把function去掉

箭头函数

function go(){
   let name ="加快学习速度!";
   console.log(name);

}
go(); //普通function写法
go=()=>{
   let name ="加快学习速度!";
   console.log(name);

}
go(); //function替换()=>

回调函数(获取异步数据)

先思考这个打印出顺序:

console.log('模拟A');
setTimeout(function(){
   console.log('模拟B');
},1000);
console.log('模拟C');
//最后得出ACB 异步处理就是 没有工作的优先执行,有工作的往后拖延排队

那么在回调函数里获取异步:

function go(back){
    setTimeout(function(){
        let name = '我得10秒后才能执行';
        back(name); 
    },1000)
}
go(function(date){
     console.log(date); 
})

ES6简写:

go=(back)=>{
    setTimeout(function(){
        let name = '我得10秒后才能执行';
        back(name); 
    },1000)
}
go((date)=>{
     console.log(date); 
})

Promise方法处理异步

let ok = new Promise((res,req)=>{   //res成功回调  req失败回调
   setTimeout(function(){
      let name = '我得10秒后才能执行';
      res(name);
    },1000)

});

ok.then((date) => {
    console.log(date);
});
//感觉比上面代码更简单一些

async 和 await

async是让方法变成异步;
await是让等待异步方法完成;

普通函数:

go=()=>{
   return '普通数据';
}
console.log(go());

不适用setTimeout情况下,让方法变成异步:

async function go(){
   return '普通数据';
}
console.log(go()); //返回 Promise对象 {"普通数据"}

如何返回不是Promise对象,直接拿到普通数据:

async function go(){
   return '普通数据';
}
go().then((date)=>{
   console.log(date);  //输出普通数据
})

await使用:

async function go(){
   return '普通数据';
}
async function text(){
    console.log(await go());  //普通数据
}
text();

观察排序(堵塞):

async function go(){
   console.log(2); 
   return '普通数据';
}

async function text(){
    console.log(1);  
    console.log(await go());  
    console.log(3); 
}
text();
// 1 2 普通数据 3

async 定义方法返回Promise对象:

//pormise方法:
function go(){
   return new Promise((res,req)=>{
      setTimeout(()=>{
         let name = '全端观察';
         res(name);
      })
   })
}
go().then((date)=>{
   console.log(date);
})


//async await方法
function go(){
   return new Promise((res,req)=>{
      setTimeout(()=>{
         let name = '全端观察';
         res(name);
      })
   })
}
async function test(){
   let date = await go();
   console.log(date);
}
test();

发表评论