javascript 高级 -- node.js--基础操作

首先,我们要理解node.js的概念,以及他的用法。node.js 是帮助我们架设外部服务器,来进行外部服务的提供。由于node.js的特点是有事件驱动(异步的处理),这样就最大化利用资源。而事件驱动(异步的处理)是靠回调函数的机制来进行。在数据加载完毕后,会触发回调函数的执行。来进行解析数据,后台给我们发送的数据。这是回调函数的妙用。在一些方法中,我们经常在方法里传参,来进行回调函数的执行。这是我们的方法。在动画中,我们经常用传参的方法传入回调函数作为参数来代表动画完成的来触发回调函数的执行。可以作为连续的执行脚本。
其实,node.js本身也是js 也需要执行运行的环境,所以,我们需要为node.js配置环境, 在执行代码的时候,我们也需要在浏览器进行解析,导入到浏览器中,进行解析。来看服务器的数据。但是我们还可以通过cmd的命令进行解析node(架设的服务器)数据。通过命令,我们第一步首先是进入我们的文件项目的路径。直接把文件导入到命令中。然后进行把文件的路径取掉。就拿到我们需要文件所在的路径。然后,在命令里,直接在用node命令来直接调用node文件,在工作中,我们要经常用到命令的形式的来经常调用node文件。在编辑器中,我们也可以用webstorm的编辑器来。但是我们也可以在编辑器里用命令的形式来进行解析node文件。

node.js虽然是脚本语言(本质是javascript),而且是单线程的支持。但是由于是异步的处理数据的方法,所以,node.js还是能处理大量的高频率的数据请求的,还是有很大市场的。在架设服务器上,处理高频率的数据请求,我们还选择的是node.js的方法。由于node.js是由于事件驱动的,非阻塞式1/0的模型,使其轻便高效。 node.js服务器的各种功能是由模块来进行管理的。每个模块都是有专一的功能或者提供相对应的服务。所以,我们要了解模块的概念。模块的意思是工具的集合。我们的nede.js的服d 务是在相对应的模块来进行管理。为了和jQuery的插件区别开,因为jQuery的插件是开放式的开发。人人都可以做插件,让别人下载。所以,jQuery的插件是存在风险很大的,存在隐形的bug的。而node.js的模块是闭环管理的,所以,在官网上是可以下载的。而且是安全的。这是node.js的模块是很重要的特点。

在前端上,我们的用到的node.js是http和fs模块。因为在前端我们主要通过接口的来向服务器发送请求服务器数据。这是我们要经常用到的。http模块有很多的方法来进行请求数据或者是读写写去数据的。因此,我们不仅要为node.js来配置环境,建立js文件后,我们要为js引入模块。这是我们第一步要做到的。引入相对的模块。比如,我们在架设一个基础的服务器的服务。那么,我们需要引入的是,http模块。

var http = require("http");          // 通过require()方法来调用http模块。

调用到http模块后,我们可以通过http模块创建(server)服务来进行操作。什么操作呢?就是我们的对前端请求文件的路径和要把前端请求的文件发给后台。

var server = http.createServer(function(req,res){    // 我们可以通过req的属性(url)来知道前端需要什么类型的文件,以及是文件的类型。 (req.url)所以,我们也可以通过路由来判断前端需要文件的类型以及路径。而路由是逻辑分支,所以,我们对于if....else..的逻辑语句是非常实用的。

       if(req.url=="./data.html"){

       //  如果请求data.html就执行这个路由。我们可以通过这个逻辑分支来进行数据的返回。我们可以通过res对象进行返回数据给前端。如果前端请求的是页面的话我们可以通过node.

       res.write("welcome to data.html")    //这是一段文本。我们可以通过send(“文件的绝对路                     径”)来进行操作发送页面给前端。例如:

              res.send("文件的绝对路径")  // 方法


        }else if(req.url=="./index.html"){   // 这也是路由的分支。逻辑业务。我们的模式也是一样的。可以通过相对应的方法来进行操作。用res对象来进行操作。例如是:

              res.write(“welcome to index.html”)   // 同样的是给发送一段文本。

             res.send("文件的绝对路径")

      }

})

// 通过调http模块的createServer服务来进行操作。在createServer()方法中,其运行原理是通过回调函数的传参来进行和前端交互的。通过传入req,res的对象来进行操作。通过路由分支进行逻辑判断的业务需要。但是,如果后台的数据交互好了。但是,怎么通知前端去接受呢?在这个完整的过程中,前端和后端的过程是三次握手,四次分手的过程。数据交互好了是握手的过程的,但是,我们需要的分手过程是用到的是:后台响应res对象的end()方法。即:

res.end();  //  这样的整个过程就完成了。数据的完成了。这样,后台和前端就可以拿到需要的数据了.在end ("hello")方法中可以传参,结束的响应的结果。只接受字符串类型。

下一步是监听端口号。端口的不同,相对应的服务也是不一样的。所以,在数据的处理方式也是在相对应的端口号中处理的,因为node.js是事件驱动来进行的。所以,我们要通过监听端口号的事件处理机制来进行触发整个数据的交互。让服务器(server)来监听端口号: 通过调用server.listen()方法来进行操作。通过这样的方法可以传参: 第一个参数是端口号(这端口号是非常重要的。) 知名的端口号:80:是系统的定义的端口号:是http协议的端口号。

443:这个端口号是https协议的端口号,前三千的端口号的已经系统占用了。我们最好是后三千的端口号。注意是:端口只能提供一项服务,如果端口号被重复占用了,我们需要更改端口号,或者是删除的端口号。

server.listen(8880,function(){   // 这是我们的通过服务器来监听的端口号的作用。

console.log("success")           // 这是我们的在控制台来进行判断是否成功还是有错误。

});

这是整个过程。架设外部服务器的完整的过程、我们需要的是几个重要的步骤。

下面我们可以通过node.js来进行文件的读写操作。这是node.js是非常重要的特性。也是和javascript不同的地方。因为javascript是不能操作内存的和本地的磁盘的文件。但是node.js是可以操作的。这是我认为是最大的特点。

我们先看看node.js的读入方式:

// 我们先引用node.js的文件的操作模块(fs)

var fs = require("fs");

 //  调用fs模块的readFile()方法进行操作。注意:这是异步的操作。

fs.readFile("url","utf-8")  // 里面可以传参。第一是文件的路径。第二个参数是读取的格式 utf-8 我们可以省略。建议是要省略。因为格式容易出错。 建议省略。第三个参数是回调函数 function(){} 这个回调函数是重要的。我们可以在回调函数传参可以拿到读取的值。在回调函数里传第一个参数是:err 是错误的信息。第二个参数是:data。这是我们要读取的值。

fs.readFile("url",function(err,data){  // 在这里我省略了读取的文件格式。如果是字符串,我们可以通过toString()方法来进行转化。err :既然是错误信息,我们可以通过err的值来判断是否读入成功了。逻辑判断。

      if(err){     // 如果err 不为空(null)或者不是undefined ,就判断。

             console.log("读入失败")  

       }else{

             console.log(data.toString)  // 我们可以通过字符串的方法来进行转化。toString() 

          }

}

// 写入文件的方法。  // 注意: url 这是新建文件的。系统可以自动创建。 第二个参数是要写入的内容。用字符串的形式来进行。第三个参数是写入的方式 是重复的写法,还是拼接的写法。是一个对象。来进行属性和属性值。是一个键值对来传入。来设置写法的方式。

fs.writeFile("url","写入的内容",{ 这是个对象              

              flag:"a"  // 这是拼接写法。flag:"w"   // 这是重复写法。

},function(err){

        if(err){

              return  console.err(err)

}else{

                  console.log("写入成功")

    }   

})

// 复制的操作

    // 先读取文件的内容。 用res响应的对象来调相关的方法来进行。操作。

var rs = res.readFlie("url","读取方式(可省略)",function(err,data){  // 通过回调函数的传参和执行代码来进行操作。我们也建议读取的方式要省略,避免出现错误。在回调函数中传参的第二个参数是我们要读取的数据。

   我们可以通过各种方法来进行操作data的值。 

          console.log(data)

})

// 写入的的方法。

var ws = res.wirteFile("url","写入的内容",{flag:"a"},function(err){

   if(err){

                     console.log(err)

        }else{

                   console.log("写入成功")

           }

})

// 异步读入

fs.readFile("url",function(err,data){

        if (err){

           console.log(err)

       }else{

           console.log("成功读入")

         }

})

// 异步的写入

fs.wirteFile("url","写入的内容(data)",function(err){   // 写入的内容要和读取的内容的格式要保持一致。

    if(err){

                   console.log(err)

         }else{

                 console.log("拷贝成功")

      }

})

// 这是管道流的读写方法。

// 引入模块  

var fs = require("fs")

 // 读取流 用fs模板的方法来调用。

var rs = fs.createReadSteam("url")       

// 在读取流没有读取64k数据后,会触发data事件。

var result;

rs.on("data",function(chunk){  // 这个data是个事件,来分64k获取数据。但是,我们的回调函数  的参数chunk是64k的片段,我们需要拼接数据的,来拼接到chunk.定一个全局变量。

result += chunk;  这是拼接到的数据。

})

// 当数据读取完毕了,会触发end()事件

rs.on("end",function(){

        console.log(result)  // 这样就可以获得的完整的数据的。result 一定是在完整的数据,也就        是我们触发end()事件 rs.on("end",function(){}) 回调函数是数据拼接完毕后,来进行回调函数的执行进行获取读取解析完整的数据。 result的里面包含着完整的数据。

})

// 写入流

var ws = fs.createWriteStream("url"); 

// 通过write()方法写入数据。

   ws.write("要写入的内容")   

还有一种简单的写法来实现文件的拷贝。用pipe()方法来进行操作。

var rs =  fs.createReadStream("url")  // 读取的文件。

var  ws = fs.createWirteStream("ul") // 写入的文件。

// 用pipe()方法来进行把读取的内容(读入流)写进(写入流)文件中。

rs.pipe(ws)            // 通过pipe()方法进行操作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • topics: 1.The Node.js philosophy 2.The reactor pattern 3....
    宫若石阅读 1,008评论 0 1
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    w_zhuan阅读 3,578评论 2 41
  • Node.js 常用工具 util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScr...
    FTOLsXD阅读 509评论 0 2
  • 个人入门学习用笔记、不过多作为参考依据。如有错误欢迎斧正 目录 简书好像不支持锚点、复制搜索(反正也是写给我自己看...
    kirito_song阅读 2,419评论 1 37
  • 阳光暖暖地照着,园子里蔬菜生机勃勃,菜心疯狂地生长,菜花儿怒放。路边的小花小草也开始彰显生命的力量。成群的小鸟在树...
    罗拉lola阅读 466评论 0 0