node.js

1:node.js 简介

node.js 就是运行在服务端的 JavaScript。

Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。

Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。

使用版本可以通过在$ node  -vl来查看
2:建立服务器

先创建server.js文件,在下面写如下代码

var http = require('http');

var server = http.createServer(function(req,res){
    res.end('hello world')
})
 server.listen(8080);
 console.log('server is running')
  
在git打开相应文件夹,输入命令node server.js,git打印出
server is running
此时访问

如果需要改变需要重新开启.

淘宝演示:

var http = require('http');
var fs = require('fs');
var server = http.createServer(function(req,res){
    fs.readFile('./taobao.html','utf-8',function(err,data){
   res.end(data);
    })
    
})
 server.listen(8080);
 console.log('server is running');
可在8080端口显示淘宝网页

3:模块化开发(后期整理)
AMDcmd conmom.js
(moudle.exports   require)

event模块

var event = require('events');
 var event1 = new event();
 event1.on('call',function(){
     console.log('calling 1');
 })
    event1.emit('call');
在git命令中输入node 文件名,可以打印出来calling 1

emit的作用是触发绑定事件,on是绑定事件,第一个名称。第二个参数是触发函数。

event1.once('call',function(){
     console.log('calling 1');
 })
once可以绑定事件,但是只能触发一次.其他和on一样.

 event1.on('call',function(){
     console.log('calling 1');
 }) 可以通过event1触发多个事件,每个绑定就好
on:添加事件 once:添加只触发一次的事件 prependListener:和on一样,事件添加到事件队列头部 prependOnceListener:和once一样,事件添加到 emit:触发事件 removeListener:删除某个事件

可以在函数内面传参
event1.on('call',function(name,age){
     console.log(name,age);
          console.log('calling 1'); 
 })
event1.emit('call','666','20');
可以直接打印出来666.20
6: fs模块   (1)文件操作
       文件操作fs.readFile(file[, options], callback)fs.readFileSync(file[, options])fs.writeFile(file, data[, options], callback)fs.writeFileSync(file, data[, options])fs.stat(path, callback)fs.statSync(path)
const fs = require('fs');
fs.readFile('./data.txt','utf-8',function(err,data){
    if(err){
 return ;
    }
fs.writeFile('./dest.txt',data,'utf-8',function(err,data){
console.log('write success')
})
console.log(data);})在同一目录下的data文件被读取,可显示内容,不加utf-8的话,出来的是16进制编码.writeFile可以创建一个文件叫dest.txt的,内容是data.如果传别的,会进行覆盖
let data = fs.readFileSync('./data.txt','utf-8');
console.log(data)
上边的这个是同步执行,不用回调函数,上面先打印data然后自己的data然后write success
 
let stat = fs.statSync('./data.txt');
console.log(stat)
上面打印出文件属性,创建时间等等.(可用于判断文件是不是文件夹或者是文件,可返回ture后者false)


7:fs模块  (2)文件夹操作
  
fs.mkdir(path[, mode], callback)fs.mkdirSync(path[, mode])fs.readdir(path[, options], callback)fs.readdirSync(path[, options])
fs.mkdir(path[, mode], callback)可以直接在git里面执行,例如mkdir dir2就可以创建一个以dir2为名的文件夹
fs.mkdir可以返回出dir4下面的文件夹
fs.readdir('./dir4',function(err,data){
          console.log(data);
})
 
8:fs模块  (3)流操作

fs.createReadStream(path[, options])fs.createWriteStream(path[, options])
const fs = require('fs');
const  rs = fs.createReadStream('./111.txt');
rs.on('data',function(data){
   console.log(data);
})
rs.on('end',function(){
    console.log('end')
})
输出:加载就打印出来,每64k为一个buffer,每次读取完把data传进来

const rs = fs.createReadStream('./111.txt','utf-8');
这么写的话,编码方式发生改变,不再是2进制
 
const  rs = fs.createReadStream('./111.txt',{
    encoding:'utf-8',
    start:10,
    end:20
});
这个是编码方式为utf-8方式,截取为第十个字节到第二十个字节的内容,可能会出现乱码中文的话(每三个字节为一个汉字)


rs. pause();
setTimeout( function() {
rs. resume()
}, 1000);

这个可以让文件读取停止,一秒以后继续读取


写的流操作:
const fs = require('fs');
const  rs = fs.createReadStream('./111.txt','utf-8');
const ws = fs.createWriteStream('./222.txt');

rs.on('data',function(data){
   ws.write(data);
})
rs.on('end',function(){
    ws.close();
    console.log('write close')
})
建立一个222.txt的文件,内容和111一样,如果111中更新,222中会覆盖 


const ws = fs. createWriteStream( './222.txt',{
flags: 'a'
}); //这样不是覆盖了,而是添加


const fs = require('fs');
const  rs = fs.createReadStream('./111.txt','utf-8');
const ws = fs.createWriteStream('./222.txt',{
    flags:'a'
});

rs.pipe(ws)

这样可以和上述实现一样效果,

rs.pipe(ws)可以实现边读边写
9:watch
const fs = require('fs');
const rs = fs.createReadStream('./111.txt');
const ws = fs.createWriteStream('./222.txt');
fs.watch('./111.txt',function(name,file){
    const rs = fs.createReadStream('./111.txt');
    const ws = fs.createWriteStream('./222.txt');
    rs.on('data',function(data){
        ws.write(data);
    })
    rs.on('end',function(){
        ws.close();
    })
})  

可以监听111中的文件,222中和111中的文件一样可以用另一种写法:

const fs = require('fs');
const rs = fs.createReadStream('./111.txt');
const ws = fs.createWriteStream('./222.txt');
fs.watch('./111.txt',function(name,file){
    const rs = fs.createReadStream('./111.txt');
    const ws = fs.createWriteStream('./222.txt');
   rs.pipe(ws)
})  
10:网络操作

  http.Server的方法

on:给server添加事件处理函数listen:使用服务器监听端口
const http = require('http');
const server = http.createServer(function(req,res){
  res.end('hello world')
})
server.listen(3000);
在3000端口号创建一个服务器,不论什么请求都返回hello world 
const server = http.createServer()
server.on('request',function(req,res){
    res.end('hello world')
})

两种写法效果一样

     http.Server的事件

  • request
  • close

server.on('close',function(){

    console.log(111);
})

上述代码写的事服务器异常关闭的时候,打印111;

    http.IncomingMessage

  封装了客户端发送过来的请求

  重要的属性和方法

  • req.headers:请求头
  • req.url:请求路径
  • req.method:请求方法
  • req.httpVersion:http协议的版本 


  • http.ServerResponse
  • 可操作返回给用户的响应

  •     重要的属性和方法

  • res.end([data][,encoding][,callback])

用于声明整个请求已经发送完毕,每个响应必须调用一次

  • res.write(chunk[,encoding][,callback])

用于往请求主体汇总写入数据

  • res.statusCode()

可操作响应状态码

res.statusCode = 200;

  • res.statusMessage()

可操作响应状态信息

res.statusMessage = 'failed'

  • res.writeHead(statusCode[,statusMessage][,callback])


11:
const http = require('http');
const server = http.createServer(function(req,res){
  if(req.url ==='/taobao'){
      res.end('taobao');
  }else if(req.url ==='/baidu'){
      res.end('baidu')
  }else{
      res.end('404')
  }
})
server.listen(3000);


效果如上


const http = require('http');
const fs = require('fs');
const server = http.createServer(function(req,res){
  if(req.url ==='/taobao'){
     fs.readFile('./views/taobao.html',function(err,data){
         if(err){
             res.statusCode = 500
             res.statusMessage = 'server is done';
         }
         res.end(data);
     })

这样的话可以直接显示淘宝页面
























































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值