node.js概述,全局对象,模块,模块分类,包和npm,网址(URL)

一、Node.js概述

Node.js是运行在服务器端 JS 环境
1、JS和Node.js的区别
    (1)JS运行在浏览器中,有多种解释器,存在代码兼容问题
              Node.js运行在服务器端,只有谷歌V8引擎,不存在代码兼容问题
    (2)两者都有相同的自定义对象和内置对象
                     不同的是宿主对象
    (3)JS用于开发浏览器端用户交互,
              Node.js用于后端开发,例如数据库访问、调用其他服务器

2、网址
官网:www.nodejs.org
中文:www.nodejs.cn

3、运行Node.js
(1)脚本模式
node 文件路径 回车
(2)交互模式
node 回车
退出交互模式 : ctrl+c (按两次) 或者 ctrl+d

4、特点
单线程运行逻辑 线程是程序运行的单位

二、全局对象

可以在任意作用域下访问的对象
1、global    (全局的,全球的)
    检测一个变量或者函数是否为全局的
    交互模式下,属于是在全局作用域下
    脚本文件下,不属于全局作用域下,变量和函数都是局部,解决了全局污染

JS下,全局global名字发生了变化:叫做window
JS脚本文件下,属于全局作用域,存在全局污染

> var a=1
undefined
> global.a
1
> function fn(){return 2}
undefined
> global.fn
[Function: fn]
> let b=3
undefined
> global.b
undefined  

//练习:编写脚本文件,声明变量,创建函数,使用global检测是否为全局
var a=1
function fn(){return 2}
//使用global检测是否为全局
//a和fn()不能使用global访问,当前文件不是在全局作用域下
console.log(global.a) //undefined
console.log(global.fn) //undefined
——————————————————————————
//练习:编写文件01_window.js和01_html,把js文件嵌入到html中,检测js是否为全局
01_html文件下代码
<script src='01_window.js'></script>

01_window.js文件代码

var a=1
function fn(){return 2}
console.log(window.a)
console.log(window.fn)
> var a=1
undefined
> global.a
1
> function fn(){return 2}
 undefined
> global.fn
[Function: fn]
> let b=3
undefined
> global.b
undefined

//练习:编写脚本文件,声明变量,创建函数,使用global检测是否为全局
var a=1
function fn(){return 2}
//使用global检测是否为全局
//a和fn()不能使用global访问,当前文件不是在全局作用域下
console.log(global.a) //undefined
console.log(global.fn) //undefined
——————————————————————————
//练习:编写文件01_window.js和01_html,把js文件嵌入到html中,检测js是否为全局
01_html文件下代码

<script src='01_window.js'></script>

01_window.js文件代码
var a=1
function fn(){return 2}
console.log(window.a)
console.log(window.fn)

2、console (控制台)
console.log ( 1 ) 打印日志
console.info ( 2 ) 打印消息
console.warn ( 3 ) 打印警告
console.error ( 4 ) 打印错误
console.time( ’ ’ ) 开始计时
console.timeEnd ( ’ ’ ) 结束计时

//info 消息
//warn 警告
//error 错误
console.log(1) //打印日志
console.info(2) //打印消息
console.warn(3) //打印警告
console.error(4) //打印错误
————————————————
//统计程序运行时间
//开始计时
console.time(‘for’)
for (var i=1;i<=Math.pow(2,18);i++ )
{
}
//结束计时
console.timeEnd(‘for’) //for: 2.786ms

//开始计时 while
console.time(‘while’)
var m=1
while (m<=Math.pow(2,18))
{
m++
}
//结束计时
console.timeEnd(‘while’) //while: 1.603ms

//开始计时
console.time(‘do-while’)
var j=1
do
{
j++
}
while (j<=Math.pow(2,18));
//结束计时
console.timeEnd(‘do-while’) //do-while: 1.548ms

3、process
进程对象,计算机上启动的软件都会产生相应的进程,每个进程都会占用一定的资源(内存、cpu……)
process.arch 查看当前CPU架构
process.platform 查看当前操作系统
process.pid 查看当前进程编号(系统随机分配)(目的是为了区分不同的进程)
process.kill ( ) 结束指定编号的进程 ( 既可以结束自己的进程,也可以结束别发进程 )

 > process.arch
'x64
> process.platform
 'win32'
> process.pid
5108
> process.kill(5108)
C:\Users\17308>

4、buffer (缓冲区)
缓存区:是内存中一块区域,用于临时保存数据
var buf = Buffer.alloc ( 5,’ ab雅 ’ ) //创建Buffer,分配空间大小为5个字节,每个汉字占3个字节
buf.toString ( ) //将Duffer格式的数据转为字符串

//分配一块空间作为Buffer,存储数据
//alloc 分配 单位是字节
//每个英文字符占1个字节,汉字占3个字节
var buf=Buffer.alloc(5,‘abcde’)
var buff=Buffer.alloc(5,‘abcd刘德华’)
var buffe=Buffer.alloc(9,‘王心凌’)
var buffer=Buffer.alloc(6,‘abcd’)

console.log(buf) //<Buffer 61 62 63 64 65> (16进制) ascll码
//转为字符串
console.log(buf.toString()) //abcde

console.log(buff) //<Buffer 61 62 63 64 e5>
console.log(buff.toString()) //abcd�

console.log(buffe) //<Buffer e7 8e 8b e5 bf 83 e5 87 8c>
console.log(buffe.toString()) //王心凌

console.log(buffer) // <Buffer 61 62 63 64 61 62>
console.log(buffer.toString()) //abcdab

三、模块

模块表示一个独立的功能体,Node.s下每一个文件就是一个模块
       require()    用于引入一个模块,模块名称如果是js文件,可以省略后缀名
       module   当前模块的对象
       module.exports = { }    当前模块要暴露对象,默认是一个空对象,如果想让外部使用哪一个,就把其添加到暴露对象中
      __dirname    获取当前模块的绝对路径
      __filename    获取当前模块的绝对路径+模块名称

//引入同一级目录下的05_eye.js
//同一级目录 . /
//引入成功后,得到的是暴露对象
var obj=require(‘./05_eye.js’)
console.log(obj) //眼睛 { myA: 1, myFn: [Function: fn] }
//使用暴露对象:用暴露的名字
console.log(obj.myA,obj.myFn()) //1 [Function: fn]
=======================================
//模块作用域
console.log(‘眼睛’)
//局部变量
var a=1
//局部函数
function fn(){
return 2
}
//暴露对象:如果想让外部使用哪些,需要暴露出去
//往暴露对象中添加内容
module.exports={
myA:a,
//把函数fn暴露出去,让外部调用
myFn:fn
}
————————————————————————————————————
| 练习:
| //引用同一级下的06_circle.js
var obj=require(‘./06_circle.js’)
console.log(obj) //{ cFn: [Function: fn], cFun: [Function: fun] }
console.log(obj.cFn(2),obj.cFun(3))
======================================
//创建函数,输入半径得周长
function fn®{
//获取 Π 保留两位小数
return r2Math.PI.toFixed(2)
}
//创建函数,输入半径得面积
function fun®{
//获取 Π ,保留三位小数
return rrMath.PI.toFixed(3)
module.exports={
cFn:fn,
cFun:fun
}

四、模块的分类

自定义模块(用户创建的)、核心模块(官方提供的)、第三方模块(别人提供的)
以路径开头不以路径开头
文件模块require( ’ . / circle . js ’ ) 用于引入自定义模块
目录模块require ( ’ . / 02 _ tao ’ ) 先到目录下查找package . json 文件,main对应的文件,如果没有会自动去查找 index.jsrequire( ’ tao ’ ),如果当前目录下没有,会一直往上一级的node_modules目录寻找,用于引入第三方模块

//同级目录 ./
//上一级目录 …/
//上一级目录 …/…/
//下一级 ./03_2/文件名称

//练习:在03_1 . js 中引入同一级目录下的03_2目录模块,包含文件index.js,在文件中创建一个函数
// 传递任意两个数字返回最大值,将函数暴露出来。在03_1 . js 中调用暴露的函数

03_1.js中引入03_2目录模块
var max=require(‘./03_2’)
console.log(max(3,4))

index.js文件
function fn(n,m){
//return n>m ? n:m
return Math.max(n,m)
}
module.exports=fn

五、包和npm

CommonJS :是 一种模块规范,Node.js就是采用了这种规范
包(package):指第三方模块,需要先下载安装才可以使用
npm : 是Node.js下,专门下载第三方模块的工具,在安装Node.js时候会附带安装
       npm   -v       查看npm版本号
npm查找官网:www.npmjs.com

1、npm命令
使用npm下载之前,要确保命令行对应的下载目录
npm init -y : 用于生成package.json文件,作为项目描述文件,可以记录项目所需要的包
npm install 包的名称 : 要下载安装指定的包,将包下载到当前目录下的node_modules目录,如果不存在会自动创建;
生成一个package-lock.json,记录所有的包的信息;在package.json文件中记录下载的包

npm install 自动安装package.json和package-lock.jsn中记录的包

其他npm命令:www.npmjs.cn(中文版)

六、网址(URL)

统一资源定位,互联网上的任何资源 ,都有对应的网址

http://www.codeboy.com:9999/products.html?kw=dell
http://218.247.142.210:9999/products.html?kw=dell
协议 域名/IP地址 端口 文件的路径 查询字符串
查询字符串:前端向后端传递参数的一种方式,位于网址中
kw=dell
参数名=参数值
参数名=参数值&参数名=参数值

new URL() 将一个网址转为对象,可获取网址的各个部分
searchParams 获取查询字符串部分
get(‘ 参数 ’) 获取传递的参数值

//假设后端拿到了前端传递的参数
// 网址
var str=‘http://www.codeboy.com:9999/product.html?kw=戴尔&a=1’
//获取
//把网址转换为对象
var obj=new URL(str)
//console.log(obj)
//获取查询字符串部分
var qs=obj.searchParams
//console.log(qs) //URLSearchParams { ‘kw’ => ‘戴尔’, ‘a’ => ‘1’ } => 表示箭头函数
//获取两个参数的值
console.log(qs.get(‘kw’),qs.get(‘a’)) //戴尔 1

获取网址https:www.tmooc.cn:443/course/web.html?cid=2204&cname=nodejs,打印班级编号,课程名称
var str=‘https:www.tmooc.cn:443/course/web.html?cid=2204&cname=nodejs’
var obj=new URL(str)
var qs=obj.searchParams
console.log(班级编号:${qs.get('cid')},课程名称:${qs.get('cname')}) //班级编号:2204,课程名称:nodejs

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luanma3p

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值