nodejs原理和环境搭建

js运行时在浏览器端,nodejs运行中服务器端

nodejs
/**
前端工程师
 - 低门槛
 - 学习成本低
 - 前端工具,脚手架
 - LAMP --> js趋势
 
 后端: web = linux + Apache + php + mysql
 ssr = php + js
 ssr = react + nodejs
*/
能做什么?
  • web svr 接入层
  • 命令行工具
  • 批处理脚本
局限性
  • 性能差 单线程
  • 进程守护
  • 安全性
  • 动态语言
  • 生态
版本管理工具
  • nvm
  • n
  • nvs
全局对象
/**
global全局对象
- require,module,export,__filename,__dirname
- process,buffer
- console
- setTimeout,clearSetTimeout,setInterval,setImmediate
*/
阻塞

同步阻塞,异步非阻塞

/**
同步: 指的做一件事,一步一步执行,第一件事情做完了,再去做第二件事,以此类推
异步: 指的是多件事情同时进行
举个例子: 家里的滚筒洗衣机,你可以把衣服丢进去然后去看电视这就是异步执行,你要是把衣服丢进去就一直盯着洗衣机,洗完了再去看电视,这就是同步执行
*/
const fs = require('fs')
// 同步执行
const data = fs.readFileSync('./conf.js')

// 异步执行 
// 1. readFile
fs.readFile('./conf.js',(err,data)=>{
	...
})
// 2.promisify
const {promisify} = require('util')
const readFile = promisify(fs.readFile)
readFile('./conf.js').then(data=> ... )
// 3.promises
const fsp = require("fs").promise
fsp.readFile('./conf.js').then().catch()

// 4. async/await
(async ()=>{
	const fs = require('fs')
	const { promisify } = require('util')
	const readFile = promisify(fs.readFile)
	const data = await readFile('./index.html')
})()
缓冲区
// 创建长度为10字节以0填充的Buffer
const buf1 = Buffer.alloc(10)
// 创建一个buffer包含ascii
const buf2 = Buffer.from('a')
// 创建包含utf-8
const buf3 = Buffer.from('Buffer创建方法');
// 写入数据
buf1.write('hello');
// 读取Buffer数据
console.log(buf3.toString());
// 合并Buffer
const buf4 = Buffer.concat([buf1, buf3]);
http服务
// 创建一个http服务
const http = require('http');
const server = http.createServer((request, response) => {
console.log('there is a request');
response.end('a response from server');
});
server.listen(3000);
stream流
const fs = require('fs')
const rs2 = fs.createReadStream('./01.jpg')
const ws2 = fs.createWriteStream('./02.jpg')
rs2.pipe(ws2);
//响应图片请求,05-http.js
const {url, method, headers} = request;
else if (method === 'GET' && headers.accept.indexOf('image/*') !== -1) {
fs.createReadStream('.'+url).pipe(response);
}
通过nodejs复制文件
var fs = rquire('fs')
function copy(src,dst){
	fs.writeFileSync(dst,fs.readFileSync(src))
}
function copy2(src,dst){
	fs.createReadStream(src).pipe(fs.createWriteStream(dst))
}
function copy3(src,dst){
	const bufferSize = 1024*1024
	const buffer = Buffer.alloc(bufferSize)
	const readStream = fs.createReadStream(src)
	const writeStream = fs.createWriteStream(dst)
	readStream.on('data',(chunk)=>{
		let offset = 0;
		while(offset < chunk.length){
			const bytes = Math.min(buffer.length,chunk.length-offset)
			chunk.copy(buffer,0,offset,offset+bytes)	
			writeStream.write(buffer.slice(0,bytes))
			offset += bytes
		}
	})
	readStream.on('end',()=>{
		writeStream.end()
	})
}
/** 
process.argv()
- 返回启动的js文件的绝对路径
- 当前执行的js文件路径
- 其余的都是参数
- process.cwd(): 执行目录
*/
 
网路

web,svr,http,client,rpc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

web:小源

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

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

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

打赏作者

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

抵扣说明:

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

余额充值