Node.js-前后端开发必备

1,node.js如何读取文件(异步和同布)

同步:

// 同步读取文件

var rs = require('fs');
var data = rs.readFileSync('test.js','utf-8');
console.log(data);
console.log('Read file end!');

// 输出符结果是 先内容  后end

异步:

var rs = require('fs');

rs.readFile('test.js','utf-8',function(err,data){
    if(err){
        console.log('you are wrong!');
    }else{
        console.log(data);
    }
})
console.log('Read file end!');
输出的结果是:先end  后内容


总结:其实同步读取文件比较好理解,输出的顺序也正是你要的,只需要把文件名传给rs.readFileSync()函数即可,阻塞等待完成后就可以拿到数据;


2,工作目录:

我们使用__dirname来获取执行文件时该文件在文件系统中所在的位置;

不过,有的时候,我们需要获得程序在运行时的当前工作目录。

要想获得当前工作目录给可以使用process.cwd();

Node还提供了process.chdir();允许灵活的地更改工作目录;


3,环境变量

node允许通过process.env变量来轻松访问shell环境下单变量;

process.env.SHELL


4,退出应用---process.exit();


5,ANSI转义码


/**
 要在文本终端下控制格式,颜色以及其输出选项,可以使用ansi转义码
 在文本周围添加到明显不用于输出到字符,称为非打印字符。
 如下
  console.log('\033[90m' + data.replace(/(.*)/g,'     $1') + '\033[39m');

  注释:
  \033表示转义序列到开始。
  [表示开始颜色设置
  90表示前景色为亮灰色
  m表示颜色设置结束;

*/

6,stream



fs.createReadStream 方法允许为一个文件创建一个可读到stream对象。
为了更好地理解stream,以下有个例子

fs.readFile('myfile.txt',function(err,contents){
    // 对文件进行处理


})




上面这个例子,回调函数必须要等到整个文件读取完毕,载入到ram,可用的情况下才会触发;
而下面的这个例子,每次会读取可变大小的内容块,并且每次读取后会触发回调函数;


var stream = fs.createReadStream('myfile.txt');
stream.on('data',function(chunk){
    // 处理文件部分内容
})
stream.on('end',function(chunk){
    //文件读取完毕
})

7,watch监控

var fs = require('fs');
var stream = fs.createReadStream('myfile.js');
// 获取工作目录下所有文件

var files  = fs.readdirSync(process.cwd());
files.forEach(function(file){
  // 监听  .css 后缀的文件

  if(/\.css/.test(file)){
    fs.watchFile(process.cwd() + '/' + file,function(){
      console.log('-' + file + 'changed!');
    })
  }
})



8,TCP

/***
 TCP有哪些特性呢?
 1,TCP的首要特性就是它是面向连接的;
 面向连接的通信和保证顺序的传递
 说到TCP,可以讲客户端和服务器端端通信看作是一个连接或者数据流。这种开发面向服务的应用和流应用是很好的抽象,
 因为tcp协议做基于的ip协议是面向无连接的;
 IP是基于数据报的传输。这些数据报是独立进行传输的,送达的顺序也是无序的。
 2,面向子节
 tcp对字符以及字符编码是完全无知的,不同的编码会导致传输的子节数不同。
 tcp允许数据以ASCII字符或者unicode进行传输;
 正是因为对消息格式没有严格的约束,使得tcp有很好的灵活性;
 3,可靠性
由于tcp是基于底层不可靠的服务,因此,它必须要基于确认和超时实现一系列的机制来达到可靠性;
4,流控制
tcp会通过一种叫流控制的方式来确保两点之间传输数据的平衡;
5,拥堵控制
tcp有一种内置的机制能够控制数据包的延迟率以及丢包率不会太高,以此确保服务的质量;
 */

tcp  net 连接

package.json

{
    "name":"tcp-chat",
    "description": "Our first TCP server",
    "version": "0.0.1"
}
index.js

// demo2
var net = require('net');

// 创建服务器
var count = 0;
var server = net.createServer(function(conn){
    conn.write(
        '\n > welcome to \033[92mnode-chat\033[39m'
        + '\n > ' + count + 'other people are connected at this time.'
        + '\n > please write your name and press enter'
    );
    count++;
    conn.on('close',function(){
        count--;
    })
})

// 监听

server.listen(3000,function(){
    console.log('\033[90m server listening on *:3000\033[39m');
})
注意:打开至少两个cmd,一个启动服务,另外的就是指的客户端访问:telnet  127.0.0.1 3000 每打开一个cmd,连接tel,count就会+1,关闭一个则会-1;

9,data事件

本例是客户端的信息及时更新到服务端



// demo2
var net = require('net');

// 创建服务器
var count = 0;
var server = net.createServer(function(conn){
    conn.write(
        '\n > welcome to \033[92mnode-chat\033[39m'
        + '\n > ' + count + 'other people are connected at this time.'
        + '\n > please write your name and press enter'
    );
    count++;

    conn.on('data',function(data){
        console.log(data);
    })

    conn.on('close',function(){
        count--;
    })

    conn.setEncoding('utf8');
})

// 监听

server.listen(3000,function(){
    console.log('\033[90m server listening on *:3000\033[39m');
})

9,状态以及纪录连接情况

为了向其他的连接进来的客户端发送和广播消息,我们需要对该状态进行扩展,来追踪到底谁进来了。

当客户端输入昵称后,就认为该客户端已经连接成功,并可接受消息了!



// demo2
var net = require('net');

// 创建服务器
var count = 0,users = [];

var nickname;  // 代表当前连接端昵称
var server = net.createServer(function(conn){
    conn.write(
        '\n > welcome to \033[92mnode-chat\033[39m'
        + '\n > ' + count + 'other people are connected at this time.'
        + '\n > please write your name and press enter'
    );
    count++;

    conn.on('data',function(data){
        console.log(data);
        data = data.replace('\r\n','') // 删除回车键
        if(!nickname){
            if (users[data]) {
                conn.write('\033[93m> nickname already in use.try agagin:\033[39m');
                return;
            } else {
                nickname = data;
                users[nickname] = conn;
                for (var i in users) {
                    users[i].write('\033[90m > ' + nickname + 'joined the room \033[39m\n');
                }
            }
        }
    })

    conn.on('close',function(){
        count--;
    })

    conn.setEncoding('utf8');


})

// 监听

server.listen(3000,function(){
    console.log('\033[90m server listening on *:3000\033[39m');
})







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值