node基础(2)

NODE基础(周啸天2)

NODE

NODE

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

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

JS是全栈编程语言

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编程的优势:

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

NODE中的模块

node把所有的js按照模块进行划分,分为:

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

1、下载安装第三方模块

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

2、导入

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

3、使用

less.render()

4、如果我们想把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…

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

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

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

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

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

3、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是以对象键值对的方式存储的

4、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’
时间: 2024-08-03 09:27:23

node基础(2)的相关文章

node基础(3)

NODE基础(周啸天3) NODE HTTP事物 HTTP传输的这件事,能称之为事物,说明这件事情比较的完整:Request + Response,只有请求和响应两个阶段都完成,才算HTTP事物完成 HTTP报文 1.客户端不仅可以向服务器发送请求,还可以把一些内容传递给服务器 2.服务器端也会把一些内容返回给客户端 客户端传递给服务器的内容以及服务器返回给客户端的内容统称为"HTTP报文":请求报文.响应报文 不管是请求还是响应报文,内容中都包含三部分: 起始行 : 请求起始行.响应

node基础知识(1)

NODE基础(周啸天1) NODE 1.常用DOS命令 WIN键+R键 -> cmd -> 打开DOS命令窗口 ipconfig 或者 ipconfig -all :查看本机电脑的IP地址.子网掩码.默认网关.DNS.物理地址(MAC地址)等信息 我们看到的IP地址属于局域网IP或者叫做内网IP,如果大家的子网掩码和默认网关相同,IP地址只有最后一组数据不一样(连接的是同一个路由器/WIFI) ,此时说明大家在同一个局域网内,我们可以通过IP互相访问 cls 清屏 exit 退出 D: 直接进

node基础应用

node基础应用 API art-templat express mongoDB 1.概念 1.Node.js 基于javascript开发,运行在服务端. 2.事件驱动.非阻塞I/O 3.基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好. 2.实操 2.1 安装 node node 官网 检查是否安装成功 node -v /--version 2.2 简单使用 1.node和浏览器一样可以执行js文件 cmd 打开命令窗口 在终端输入 ` node 文件名.

node基础01:简要介绍

1.node vs php 优点 性能高(机制问题) 开发效率高(省了不少优化的事) 应用范围广(可以开发桌面系统,electron框架) 缺点 新,人少 中间件少 IDE不完善 2.node的劣势和解决方案 默认不支持多核,使用cluster可以解决 默认不支持服务器集群,node-http-proxy可以解决 使用nginx做负载均衡,静态的由nginx处理,动态由node处理 forever或node-cluster实现灾难恢复 3.框架选择 比较热门的框架有:express,koa,Ha

node基础

         今天在网上看到了一个原来没有听说过的定义,高阶函数和偏函数.个人觉得这么个形容还是很有创意的.也可能我很土鳖没有见过世面吧!在此稍作解释. function hignFun(){ return function(a,b){ a+b; } } var add = hignFun();       据说这就是高阶函数,其实这么个称谓我觉得也是比较恰当的.类比高数中的高阶函数,还是比较形象的.起码对于记忆标识这种形式的函数是有帮助的. var isType = function (t

Vue.js 运行环境搭建详解(基于windows的手把手安装教学)及vue、node基础知识普及

Vue.js 是一套构建用户界面的渐进式框架.他自身不是一个全能框架——只聚焦于视图层.因此它非常容易学习,非常容易与其它库或已有项目整合.在与相关工具和支持库一起使用时,Vue.js 也能完美地驱动复杂的单页应用. 在配置环境之前呢,有些基础的东西还是要和大家普及一下的.如果你已经对Vue.js有所了解,那请点击 配置步骤  跳转到配置环境的阅读,否则,请耐心看完看完. 首先,介绍一下Vue.js的概念,他是干啥的呢?一定要配置vue的运行环境吗? 如上述Vue.js不是个全能的框架,因为他的

Node 基础 备注

1.1 Node简介 Node的异步I/O, 在Node中,可以从语言层面很自然的进行并行I/O操作,每个操作直接无需等待之前的I/O调用结束: 事件与回调函数: Node保持了JavaScript在浏览器中单线程的特点,而且在Node中,JavaScript与其余线程是无法共享热河状态的,单线程的最大好处是不用像多线程编程那样处处在意状态的同步问题,没有死锁的存在,也没有线程上下文交换所带来的性能上的开销: 1.2 模块 JavaScript先天缺乏一项功能: 模块:  javascript通

node 基础概念整理

js和node的知识结构结构映射 角色 js node 语言基础: ECMAScript ECMAScirpt 操作对象: 浏览器 DOM BOM 系统 os 文件 fs 网络 net 数据库database ... 顶层对象: window global 模块目录解析 path: 路径解析模块 - 获得模块的路径.路径拼接... fs:文件系统模块 - 打开.修改.重命名.监听... global:全局变量 - 设置全局变量和方法.包含默认的全局方法啊 events:事件系统 - 注册一些事件

node基础11:接受参数

1.接收参数 在Node中接受GET/POST请求的参数不像PHP那样,在PHP中直接有全局变量$_GET,$_POST来接受url,或者请求体重的参数. 在node中接受GET参数使用url.parse(req.url, true).query可以获取请求参数,使用queryString.parse(data)来从请求体中来获取字段. // server.js var http = require("http"); var url = require('url'); var rout