node.js基础

一 ,认知

Node.js 一门新的后端语言吗 ? 错误

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境 。

Chrome V8 引擎 ,这个引擎是用C++ 写的 , 这个引擎可以解析JS。浏览器就叫做JS的运行环境 。

V8引擎 ,添加到了Node.js中 , 那么就可以在后端来解析JS 。

Node.js是运行环境 。 (浏览器是前端的运行环境 ,Node.js 是后端的运行环境)

Node.js 去哪里下载 ? 英文官网 : nodejs.org 中文官网 nodejs.cn

在电脑的搜索里 输入 cmd ,输入 node -v ,如果打印出来版本号,说明安装成功 (全局环境变量ww)

Node.js 使用了一个事件驱动 , 非阻塞式 I\0 的模型 , 使其轻量又高效。

单线程与多线程 (多核运作,可以同时运行)
单线程 : 异步

Java 复杂处理 ,高并发不太好 。(同一时间)

Node.js 适合做高并发处理 , 因为单线程

Node.js 的包管理器 npm , 是全球最大的开源库生态系统 。

Node.js 想象成手机
npm 想象成手机里的商店

npm分三部分 :

纯前端模块 : jquery , bootstrap
纯后端模块 : express , mongoose
前后端都能用的模块 :moment .axios

二, node 操作

npm -v 查看npm的版本号

d:
cd 指定的路径
tab键提示 ,自动补全内容

cd… 回到前一个目录

cd空格 地址 , 快速进入

按住shift键不放 , 点击右键 , 打开 powershell .(加强版的cmd)

上下键 , 可以查看之前的输入历史记录

ctrl + c 退出操作

cls 清屏

安装淘宝镜像 npm.taobao.org
安装cnpm
cnpm -v 来看安装好了

npm 表示用什么软件来下载
npm install -g 全局安装

install 简写 i

–global 简写 -g

node 出控制台 ,在里面写js即可。
node node.js 写node 空格 文件名 来执行这个文件 ,如果是js文件 ,后缀名可以省略

安装nodemon , 实时监听文件的变化 (或者 node -dev 也能监听)
cnpm install -g nodemon

cd node
nodemon node.js
vscode 里的终端 。新终端 选cmd , 也可以。

三, 自定义的NodeJS模块

提供对外的接口 , 通过module.exports
引入模块的方式 require() , 路径是一个相对路径(./)

用cmd , , nodemon 监听 1_node.js

1_node.js

//2_node.js

var a = require('./2_node.js');

console.log(a)

ctrl + c , 一下是继续向下执行 , 两下是退出 。

//2_node.js

var a = 123;
module.exports = a ;
//2_node.js

var a = 123;
var b = 456;
module.exports = { a ,b } ; // exports = module.exports

exports.a = a ;
exports.b = b;

exports = {a , b} // 不正确的写法 

辅助对象module . 查看模块信息

module.id
module.filename
module.loaded
module.children
module.exports 模块对外输出的值

CommenJS . 一个模块化规范 (js应用于服务端)

四,如何使用第三方模块

第三方模块, 需要通过npm进行下载使用

npm i -g xxx : 全局安装 , 一般用在命令行中
npm i xxx : 局部安装 ,一般在代码中进行使用

cnpm i moment

node_modules文件夹 , 是用来放置所有第三方下载好的模块 。

npmjs.com 官网, 想要使用的第三方模块都可以搜到

下载模块 cnpm install xxx.js

日期格式化模块

用法

require() 引入的是下载对应模块的名字

//3_node.js

var moment = require('moment')  // 模块名字,下载的啥写啥

var date = new Date();
console.log( moment(date).format('MMMM Do YYYY, h:mm:ss a') );

为什么有的模块只有前端能用 , 有的模块只有前端能用 ??\

前端是基于浏览器环境的 , 有能力操作DOM , 这些框架都是操作DOM的 ,后端没有DOM , moment , axios 和DOM没关系 ,所以后端能用

五, 内置模块

node.js 自带的模块 , 不需要下载

1.url

// 3_node.js

var url = require('url');

var str =  'https://www.npmjs.com/package/moment?username=xiaoming&age=20#abc';

console.log( url.parse( str ) )

console.log( url.parse( str ,true).query.username ) // xiaoming

console.log( url.format( str ) ) // 和parse相反

url.parse()
会解析一个url字符串并返回一个url对象
第二个参数布尔值true , 对query属性解析成对象

url.format()
返回一个从urlObject格式化后的url字符串
方法是parse()的相反操作

2.querystring

var querystring = require('querystring')
var str = 'https://www.npmjs.com/package/moment?username=xiaoming&age=20#abc';
str = url.parse(str).query  //  'username="xiaoming"&age=20'
console.log( querystring.parse( str ) ) //{username:xiaoming,age:20}
var querystring = require('querystring')
var str = 'username-xiaoming@age-20';

console.log( querystring.parse( str , '@' ,'-') )//参数规定由什么来决定多个值

var obj = {username : 'xiaoming' , age : 20};
console.log( querystring.stringify( obj , '@' ,'-' ))

3.process进程

浏览器才有 window , document ,后端没有

//4_node.js
console.log( window ) //报错

后端有global ,前端没有
global一般可以省略

window.console.log(); // 前端的内置函数
global.console.log(123) //后端可以打印出123

process 进程 (任务管理器中的进程) (进程中的线程 相当于工厂里有很多工人在工作 ,CPU 相当于工人在做工)

node 4_node.js  

console.log( process.argv )  // 找到进程里运行的信息 ,拿到输入的命令。返回结果的数组
console.log( process.pid ) //找到这个进程

setInterval(function(){} , 1000)

setTimeout(function(){
	process.exit();//关闭这个进程
},10000)

//node添加事件采用on事件 , 和jquery很像

process.on('exit' , function()){
	console.log('进程已退出')
})

console.log(123) //底层就是进程的输出操作 , process.stdout.write('123');
process.stdin.on('dara',function(info){
	console.log(info); // Buffer是二进制的数据流, 数据传输方便,快,默认是Buffer
})

//  <Buffer 63 5e 66 6f>二进制太长了, 用十六进制的写法 来 表示二进制

console.log(info.toString())  //转回我们认识的写法

//计算器
var number1 , number2 ;
//stdin 输入 , stdout 输出
process.stdout.write('请输入第一个数字');

process.stdin.on('data',function(inof){
	if( number1 ==undefined ){
		number1 = parserInt(info)
		process.stdout.write('请输入第二个数字')
	}else{
		number2 = parseInt(info);
		process.stdout.writr(' 结果 +' +(number1 + number2))
	}


})

4.全局变量

__filename 文件名
__dirname 文件夹

console.log( __filename, __dirname) // 一般用来找文件的绝对地址

5.path模块

var path = require('path');
console.log(__dirname + '\\a.txt');

console.log( path.join(__dirname , 'b.txt')  );
console.log( path.resolve( 'hello' , 'b.txt')  ); //自动转成绝对路径
console.log( path.relative( 'D\\ke\\qf_dl121212' )  ); //可以得到一个相对的地址

console.log( path.parse('D:\\ke\\qf_dl112\\b.txt') )


{
root:'D:\\',
dir: 'D:\\ke\\qf_dl112',
base:'b.txt',
ext:'.txt',
name: 'b'
}

6.fs模块 操作文件

//异步的读取
var fs = require('fs');
fs.readFile('./aaa.txt',(err , info)=>{
	//err: 如果读取文件失败 ,会返回一个err对象 ,如果读取成功, 返回null
	console.log(err)
	if( err ){
		return;
	}
	console.log(info) //文件里的内容  buffer
	console.log( info.toString() )  //或者参数加一个 'utf-8' 
})

在fs模块中 , 一般方法都提供异步和同步操作

回调参数不要忘了 , 写入的内容是覆盖
当要写入的文件不存在的时候 , 会先创建再写入

fs.writeFile('./bbb.txt' , 'hahah' ,()=>{})
fs.writeFile('bbb.txt' , 'newBbb.txt' ,()=>{}) //给文件改名

创建文件夹

fs.mkdir('aaa',()=>{})
var fs = require('fs');
var argv = process.argv;

fs.mkdir(argv[2] , ()=>{});
fs.writeFile( path.join( argv[2] , 'index.html') ,``,()=>{} )
var fs = require('fs');
fs.readdir('myApp' , (err,info)=>{
	console.log(info)  //返回读取到的一个数组
})
var fs = require('fs');
fs.stat('bbb.txt',(err ,info)=>{
	console.log(info); //获取文件信息
})

六, npm

package.json 模块的说明文件 ( 产品说明书 )
如果要开发一个node项目 , 一定要先创建项目说明书

deDependencies 所有通过–save-dev 下载的模块都会写入deDependencies字段
dependencies 所有通过 --save下载的模块 都会写入 dependencies字段

script脚本 使用脚本 npm run dev 可以让调用的名字变得简短
npm run 字段
start test stop 这几个单词的时候 ,是可以省略run的 其他的不可以

创建项目说明书 npm init 项目名字不要大写

package name :(myproject)
version : (1.0.0)
license: (MIT)
is this ok ? y

npm init -y 快速创建

下载 安装
npm i -g xxx
npm i xxx 等价于 npm i xxx --save 等价于 npm i -S --save ( 把这个模块放到生产环境和开发环境 )
moment jquery

npm i xxx – save dev => npm i xxx -D --save-dev (这个模块只能在开发环境使用)(压缩文件)

gulp 工具 webpack 工具 babel 工具

卸载模块:

npm uninstall -g xxx
npm uninstall -s xxx

如何把代码给别人?
不去拷贝node_modules ,通过npm i 命令去package.json下载所有第三方所要用到的模块
cnpm i 通过package.js (用cmd打开说明书)下载所有的第三方插件 ,就生成node_modules

七 ,http模块

http ,https模块为网络通信模块
分别对应的端口是 80 443

爬虫 : 把别人网站的东西拿来自己用
后端没有跨域问题(浏览器才有同源策略)

 var http = require('http');
 var https = require('https');
 var cheerio = require('cheerio');
//发起一个请求
http.get(url)

https.get('https://www.lagou.com/',(req)=>{
	var res = '';
	req.on('data',(chunk)=>{ //事件,可以分批次爬到数据
		console,log(chunk);
		res += chunk;
	})
	req.on('end',function(){ //事件,读取结束后触发一次
		console.log( res )
		getData( res );
	})
})


function getData( html ){

	var $ = cheerio.load(html);
	$('.menu_box h2').each(i , elem){
		console.log( $(elem).text().trim()  )
	}
}

cnpm i -S cheerio

没有http.post() , 要想发送POST请求 , 用 http.request()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值