nodeJS入门(一)

nodejs

1、Node.js 是基于ChromeV8 引擎的 JavaScript 运行环境。

2、Node.js使用了一个时间驱动,非阻塞式I/O的模型,使其轻量又高效

3、Node.js的包管理器npm,是全球最大的开源库生态系统。


优点:

1、使用JavaScript

2、速度非常快(v8引擎&non-block)

3、Node.js的包管理器npm,是全球最大的开源库生态系统。


学习nodejs什么

1、学习nodejs的工作原理。(v8引擎/模块/事件队列/文件系统)

2、搭建服务器(Express/路由/template)

3、实战项目(TodoApp)

学习之前掌握技术点

1、html+css

2、JavaScript

3、Command Line

开发工具:webstorm 


第一节初识nodejs

console.log("hello!nodeJS");
//定时器
// var time = 0
// setTimeout(function () {
//     console.log("three seconds have pass")
// },3000)
//
// var timer = setInterval(function () {
//     time +=2
//     console.log(time+"seconds have pass")
//     if(time >6){
//         clearInterval(timer)
//     }
// },2000)

//路径
console.log(__dirname);//不包含当前文件名
console.log(__filename);//包含当前文件名

//global
//在js对象中全局对象是Windows,在nodejs中全局兑现格式global
console.log(global)

//nodejs基于V8引擎
// 1、电脑根本不识别也不理解JavaScript
// 2、JavaScript引擎起到的作用是让电脑识别JS代码
//nodejs底层用的是c++写的,v8引擎是nodejs核心,c++写的
//关系 JavaScript - > v8 -> nodejs —> c++ —> 电脑

第二节module&require

新建文件夹modules,存放模块代码

var counter = (arr) =>"一共有多少个元素"+arr.length +"个元素在数组"

var add = (a,b) => `a+b=${a+b}`
//模块化
var pi = 3.142
module.exports.counter = counter;
module.exports.add = add;
module.exports.pi = pi;

在主JS中引用

//在nodejs中,文件与模块是一一对应的(每个文件被视为一个独立的模块)
var obj = require("./modules/stuuf");
console.log(obj.counter([1,2,3,4,5]));
console.log(obj.add(3,2));
console.log(obj.pi)

第三节事件模块

1、大部分的Node.js核心Api都是采用惯用的异步事件驱动架构(fs/http)

2、所有能触发事件的兑现都是EventEmitter类实例。

3、事件流程:引用模块->创建EventEmitter对象 ->注册事件 ->触发事件

//时间模块
//1、引入模块
const EventEmitter = require('events');

//2.创建EventEmitter对象
var myEmitter =new EventEmitter.EventEmitter();

//注册事件同步
myEmitter.on('A',function(a){
    console.log("注册事件",a)
})
//注册事件异步
myEmitter.on('B',(b) => {
    setImmediate(()=>{
        console.log(b)
    })
})

//同步触发事件
myEmitter.emit('A','实现事件并传递此参数,同步');

//异步事件执行
myEmitter.emit('B','实现事件并传递此参数,异步');

console.log(1)

第四节文件系统

什么是文件系统

1、读取文件(fs.readFile)

2、写入文件(fs.writeFile)

3、流程:引入fs模块——>调用方法——>异常捕获

#2018-04-17更新

//引入模块
const fs = require("fs")

//读取文件

//同步读取
//var a=fs.readFileSync("C:/Users/6092002639/Desktop/资料/多实例.txt","utf-8")
//同步写入
//fs.writeFileSync("./多实例.txt",a);


//异步步读取
fs.readFile("C:/Users/6092002639/Desktop/资料/多实例.txt","utf-8",function (err,data) {
    if (err) throw err;
    console.log(data)
    fs.writeFile("./大王叫我.txt",data,function (err,data) {
        if (err) throw err;
    })
});


console.log(123)

文件系统操作

1、创建文件夹(fs.mkdir)

2、删除文件夹(fs.rmdir)

3、删除文件(fs.unlink)

4、流程:引入js模块->调用方法->异常捕获

const f = require("fs")

//删除文件
f.unlink('./modules/aaa.go',(err)=>{
    if (err) throw err;
    console.log("successfully deleted /modules/aaa.go" )
})

//同步方法的例子:
f.unlinkSync('./modules/aaa.go',(err)=>{
    if(err) throw err;
    console.log("文件不存在")
});
console.log('成功删除 /tmp/hello');

//创建文件夹
f.mkdir("./stuff",(err)=>{
    if (err) throw err
})
//同步创建
// f.mkdirSync("./stuff",(err)=>{
//     if (err) throw err
// })
//删除文件
f.rmdir("./stuff",(err)=>{
    if (err) throw err
})
//同步删除
f.rmdirSync("./stuff",(err)=>{
    if (err) throw err
})

第五节创建https

 服务器与客户端的关系

nodeJS入门(一)

1、创建服务

const http = require("http")

//通过http模块,创建服务器

//创建服务器方法

const  server = http.createServer(function (req,res) {
    console.log('客户端向服务器发送请求:'+req.url);
    res.writeHead(200,{"Content-type":"text/plain"});
    res.end("server is working!")
});

//服务对象监听服务器地址以及端口号

server.listen(8505,"0.0.0.0");

console.log("server is running");

2、缓存区及流

Buffer&Stream

nodeJS入门(一)

//读写数据流
const fs = require("fs");

//读取文件流
var myReadStream = fs.createReadStream(__dirname+"/大王叫我.txt",'utf-8');

//写入文件流
var myWriteStream = fs.createWriteStream(__dirname+"/大王叫我大帅哥2.txt")


// var time = 1
// myReadStream.on('data',(chunk)=>{
//     console.log(`***********正在接受一部分数据,第${time}次**********`)
//     //写入数据,第一种方法
//     myWriteStream.write(chunk)
//     time ++
// });

//第二种 写入方法
myReadStream.pipe(myWriteStream);

1>、实例写入到浏览器中

const http = require("http");
const fs = require("fs")
var server = http.createServer((req,res)=>{
    var myReadStream = fs.createReadStream(__dirname+"/大王叫我.txt","utf-8");
    res.writeHead(200,{"Content-type":"text/plain"})
    myReadStream.pipe(res)
});


server.listen(8077,"0.0.0.0");

console.log("大王server is running---------------")

3、读取HTML&json数据

返回html

const http = require("http");
const fs = require("fs")
var server = http.createServer((res,rep) => {
    rep.writeHead(200,{"Content-Type":"text/html"})
    var html = fs.createReadStream(__dirname+"/index.html",'utf-8');
    html.pipe(rep)
});

server.listen(2018,"0.0.0.0")

返回json

var http = require("http");
var fs = require("fs");

var json ={"isOk":true,"data":"你大爷"}
var server = http.createServer((res,rep)=>{
    /****注意****/
    //nodejs 请求的是两次
    // / 与/favicon.ico

    //去掉 favicon 请求
    if(res.url !=="/favicon.ico"){
        rep.writeHead(200,{"Content-Type":"application/json"})
        rep.end( JSON.stringify(json))
    }
});

server.listen(2018,"0.0.0.0")

4、路由

const http = require("http");
const fs = require("fs");
var server = http.createServer((res,rep) => {
    rep.writeHead(200,{"Content-Type":"text/html"});
    //判断页面访问的地址
    console.log(res.url)
    var html = "";
    switch (res.url){
        case "/":
            html = __dirname+"/index.html";
            break
        case "/mian":
            html = __dirname+"/view/haha.html";
            break
        case "/second":
            html = __dirname+"/view/heheh.html";
            break
        case "/api/docs":
            rep.writeHead(200,{"Content-Type":"application/json"});
            var data = [{"name":"Bucky","age":18},{"name":"Rose","age":18}];
            rep.end(JSON.stringify(data));
            return
        default:
            rep.end("空")
            return
    }
    console.log(html)
    var html = fs.createReadStream(html,'utf-8');
    html.pipe(rep)
});

server.listen(2018,"0.0.0.0");

第六节NPM

什么是npm?

Node Package Manger

1、NPM是随同NodeJs一起安装的包管理工具,类似python的pip,能解决Nodejs代码部署上的很多问题

 常见的使用场景

1、允许用户从npm服务器下载别人编写的第三方包到本地使用

2、允许用户从npm服务器下载并安装别人编写的命令行程序到本地使用

3、允许用户将自己的编写的包或命令行程序上传到npm服务器供别人使用

步骤

1>、 安装模块

npm install <module package>

npmjs.com  为npm  官网

注意:npm  安装必须要有Package.json文件

可以使用命令 npm init

package.josn : 用于定义项目中所需要的各种模块,以及项目的配置信息(比如名称,版本,许可证等元数据)。