node基础(2)

 

NODE

是一个以webkit(V8)引擎来渲染和解析JS的平台javascript

  • 在没有NODE以前,JS是一门基于客户端浏览器运行的脚本编程语言;JS是前端编程语言;
  • 在有了NODE以后,JS也能够运行在NODE环境中了,咱们能够把NODE安装在服务器端,这样咱们就能够在服务器端执行JS,JS也能够处理服务器端的业务逻辑了;JS是后台编程语言;

JS是全栈编程语言html

JS运行在浏览器中,浏览器提供了不少内置的属性和方法(window全局对象);JS若是运行在NODE环境下,它也提供了不少的属性和方法(global全局对象);前端

如何在NODE环境下执行JS
  • 在WB的指定JS文件中,经过鼠标右键 Run xxx.js 来运行JS代码(这样是把JS在NODE环境中执行了);这种方式有些时候会出现缓存,尤为是把执行的文件换目录后,缓存出现的概率特别大。
  • 找到当前须要执行的JS所在文件目录,在这个目录中打开DOS窗口,在窗口中输入 node xxx.js 的命令把对应JS执行;
传统后台语言和NODE的对比

传统后台语言:JAVA、PHP、C#、.NET… 
NODE做为后台运行的环境,拿JS编程的优点:
java

  • 快:基于V8引擎渲染
  • 无阻塞的I/O操做(异步对文件进行增删改查)
  • 基于事件驱动的单线程异步编程

NODE中的模块

node把全部的js按照模块进行划分,分为:node

  • 内置模块:node平台天生提供的模块
  • 自定义模块:本身写的模块
  • 第三方模块:别人写的咱们调取使用
第三方模块

一、下载安装第三方模块web

全部的第三方模块都在npmjs.com上 
在命令窗口中执行 “npm install 模块名” 来安装,把须要使用的第三方模块安装到项目目录下 
npm就是NODE中用来管理模块的命令,npm install 是安装,npm uninstall 是卸载…
npm

二、导入编程

require 
例如:var less = require(‘less’);
浏览器

三、使用缓存

less.render()

四、若是咱们想把LESS等第三方模块添加到命令行中,咱们须要把LESS安装在全局NODE环境下;

npm install less -g 
安装成功后执行 lessc -v ,能够查看到版本号

自定义模块

在NODE环境下,咱们建立的每个JS均可以理解为一个单独的模块,模块和模块之间没有冲突。咱们常常须要实现模块和模块之间的相互调用(例如B调取A中的fn方法):

  • 首先在B模块中导入A模块:var A=require(‘./A’); 即便在同一级目录下,咱们也须要加./,若是不加的话默认找的是node_modules下的模块,而不是咱们自定义的模块
  • 其次还须要在A模块中把供外面使用的方法暴露出来:module.exports={fn:fn};
  • 最后在B模块中就能够经过使用:A.fn() 执行对应的方法了
//A.js
function fn() {
    console.log(1);
}

module.exports = {
    fn: fn
};
//B.js
function fn() {
    console.log(2);
}

var A = require('./A');
A.fn();

 

 

思考题:建立三个自定义模块,A/B/C,A模块中有一个方法”任意数求和sum”,B模块中有一个方法“求平均数avg”,在B中须要调取A中的sum方法,在C模块中点去B模块中的avg方法,实现获取:98 95 92 96 95 94 92 98 93 90 这十个分数的平均数… 

//A.js
function sum() {
    var total = null;
    arguments.__proto__ = Array.prototype;
    arguments.forEach(function (item, index) {
        item = Number(item);
        !isNaN(item) ? total += item : null;
    });
    return total;
}
module.exports = {
    sum: sum
};
//B.js
var a = require('./A');
function avg() {
    arguments.__proto__ = Array.prototype;
    arguments.sort(function (cur, next) {
        return cur - next;
    });
    arguments.pop();
    arguments.shift();
    //a.sum(arguments) -> a.sum([98,95,96...]) 目标:a.sum(98,95,96...)
    return (a.sum.apply(null, arguments) / arguments.length).toFixed(2);
}
module.exports = {
    avg: avg
};
//C.js
var b = require('./B');
console.log(b.avg(98, 95, 92, 96, 95, 94, 92, 98, 93, 90));

 

 

内置模块

node天生提供好的模块,node主要应用于服务器端开发,理解服务器端须要作的事情,咱们也就理解node内置模块了。

服务器端须要作的事情

  • 建立服务,监听端口号
  • 接收和解析客户端的请求
  • 在服务器上把客户端须要的内容找到(文件内容的读取)
  • 把找到的内容返回

经常使用的内置模块:http、url、fs…

一、http 
建立服务、监听端口、接收信息、返回内容…

var server1=http.createServer([callback]); 建立一个服务,这块的回调函数不是在服务建立成功就会执行,而是须要客户端向当前的服务器发送请求,它才会执行(客户端只要发送一个请求,它就会被触发一次执行)。

server1.listen([port],[callback]); 给建立的服务监听端口号(0-65535之间),端口号不能重复,当服务建立成功端口号也监听成功后就会执行对应的回调函数;

启动服务后,服务在不出现意外或者错误的状况下是不会中止的,随时监听客户端的请求,完成咱们的响应操做。

二、服务建立成功后如何的向当前服务发送请求

三、url模块

var url=require(‘url’); 
url.parse([string],[boolean]) : 解析一个URL地址,能够把地址中的每一部分分别获取到

  • [string] 要解析的URL地址字符串
  • [boolean] 设定是否把问号传参的值解析为对象,默认是false不解析,写true则为解析

案例:

var url = require('url');
var str = 'http://www.zhufengpeixun.com:80/student/index.html?name=zxt&age=30#haha';
var result = url.parse(str);
console.log(result);

//->结果以下
{
  protocol: 'http:',   //->协议
  slashes: true, //->是否有斜线
  auth: null, //->做者
  host: 'www.zhufengpeixun.com:80', //->域名+端口
  port: '80', //->端口
  hostname: 'www.zhufengpeixun.com', //->域名
  hash: '#haha', //->哈希值
  search: '?name=zxt&age=30', //->问号传参
  query: 'name=zxt&age=30', //->问号传参,不带问号
  pathname: '/student/index.html', //->路径名称
  path: '/student/index.html?name=zxt&age=30', //->路径名称+问号传参
  href: 'http://www.zhufengpeixun.com:80/student/index.html?name=zxt&age=30#haha' //->原始字符串
}
//若是第二个参数设为true的话:
{
  ...
  query: { name: 'zxt', age: '30' },
  pathname: '/student/index.html'
  ...
}
//->query是以对象键值对的方式存储的

 

四、fs模块 
实现对服务器上的文件进行I/O操做的

var fs=require(‘fs’);

  • fs.readFileSync 同步读取文件中的内容 
    var con=fs.readFileSync(‘./index.html’); 
    第一个参数是读取文件的路径地址 
    第二个参数是读取文件内容的编码格式 
    读取出来的内容是字符串格式的
  • fs.readFile 异步读取文件中的内容 
    fs.readFile(‘./index.html’,function(){ 
    读取成功后触发会发回调函数执行 
    });

除了读取内容之外还能够向文件中写入内容

fs.writeFileSync([pathname],[content],[encode])

  • 第一个参数是路径名称
  • 第二个参数是须要写入的内容(注意只能是字符串或者buffer格式的数据)
  • 第三个参数是编码格式,通常经常使用’utf-8’
相关文章
相关标签/搜索