小子日常更新!码住!
nodejs的出现打破了js只能在浏览器运行的局限,实现了前后端编程环境与语言的统一。
有兴趣的可以阅读下狼叔文章:传送门
- 基本的Node.js几个特性,比如事件驱动、非阻塞I/O、Stream等
- 异步流程控制相关,Promise是必问的
- 掌握1种以上Web框架,比如Express、Koa、Thinkjs、Restfy、Hapi等,会问遇到过哪些问题、以及前端优化等常识
- 数据库相关,尤其是SQL、缓存、Mongodb等
- 对于常见Node.js模块、工具的使用,观察一个人是否爱学习、折腾
- 是否熟悉linux,是否独立部署过服务器,有+分
- js语法和es6、es7,延伸CoffeeScript、TypeScript等,看看你是否关注新技术,有+分
- 对前端是否了解,有+分
- 是否参与过或写过开源项目,技术博客、有+分
根据狼叔所列标准学习,木的明确
nodejs特点
1、基于chrome v8引擎的js运行环境
commonjs是服务端nodejs模块化的规范,是js的语言解释器,底层源码是c++开发而成的
2、事件驱动
指针对当前时间点出现的事件,抽出相应可用资源去执行,使得不断出现的事件得到执行,不堵塞
3、非阻塞I/O(input, output可指读与写),单线程
相较于传统后端语言的多线程、阻塞i/o,nodejs只有一个单线程不断轮询查询队列中是否有事件(数据库操作、文件读写、http请求等易阻塞等待的操作);
这就涉及到nodejs的底层线程池,node会将任务分发给各个线程池线程,待有结果后,将结果与相应回调函数放入队列中执行
4、stream
是一个有序的、有起点有终点的字节数据传输手段,读取和写入速度可控
首先创建一个本地服务
const http = require('http');
const fs = require('fs');
http.createServer((req, res) => {
fs.readFile(__dirname + './file/something.txt', function (err, data) {
res.end(data);
});
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello world\n');
}).listen(9999);
tips:乱码是因为文件读取是pdk编码格式,需要用utf-8来解码 res.setHeader(‘Content-Type’, ‘text/plain; charset=utf-8’);
上面的这段代码很正经,每次收到请求后,会把相应文本读到内存中再返回给客户端。这里就会根据事实情况发生不可控,如若文件过大,势必会多占用内存,也可能导致客户段接受变慢;
根据node, (req,res)参数都是流对象,可以使用fs.createReadStream方法创建流
const http = require('http');
const fs = require('fs');
http.createServer((req, res) => {
let stream = fs.createReadStream('./file/something.txt');
stream.pipe(res);
}).listen(9999);
可以看出.pipe()方法帮助拿到回调函数的data,并且执行end()方法;
异步流程(i/o)
普通的读取文件
const fs = require('fs');
//读取文件
fs.readFile('./file/something.txt', (err, data) => {
if (err) throw err;
console.log('数据:\n', data.toString());
});