前不久一直在学vue.js 对于自带的脚手架很多运行模式不是很理解。做了个小dome就停了,浏览了一些es6语法,模块化的概念,今天遇到node.js让我有一种豁然开朗的感觉。原来好多疑惑的事情是这么回事。
1. 什么是node.js
正如维基百科所说:“Node.js 是谷歌 V8 引擎、libuv平台抽象层 以及主体使用 Javscript 编写的核心库三者集合的一个包装外壳。” 我的理解 它是一个服务器端语言,让js不在只依赖于浏览器,提供了一个新的环境,利用事件驱动,实现异步执行,用回调把函数作为参数传到总函数的参数中,从而可以按照你想要的执行逻辑异步执行,执行函数就像是一个插排 各个回调函数就像插排上的开关按钮,通过插排触发开关执行电灯(函数)
2. 为什么要用node.js
让我们来分析一下node.js的优点和缺点,首先优点采用了基于 WebSocket 的推送技术打破了传统的无状态的请求-返机制的无状态交互机制,实现了双向连接的web应用,客户端和服务器端都可以发起请求,其次它实现了利用事件驱动的 I/O 操作保持了跨平台并且使用非阻塞的异步开发。首先I/O 操作这个概念需要了解一下,简单的说I就是input,O就是output,也就是在设备平台上输入和输出,因为现在cup的速度都很快,所以当有大量I/O 操作时候,会出现阻塞的情况,而node.js则利用事件回调使用非阻塞的异步 I/O,所有连接都由该线程处理(所有时间都挂在事件循环中)并且不用同事开很多线程使得它节约了很多内存(包括新线程的内存,以及每个线程的上下文环境)。但它也有它的局限性,由于都由一个线程处理,所以它并不擅长大量计算的请求,这样会出现线程暂时失去连接,更为致命的是这影响的不只是一个请求,而是所有的请求一直阻塞,直到计算后才可以恢复正常。
3.node.js的初使用--配置服务器
配置方法下载什么的就不说了,到处都有,先配置一个服务器吧,新建一个server.js的页面。
const http = require('http');
const hostname = '127.0.0.1';
const port = 1337;
http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello node.js\n');
}).listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
这段代码分别是 先引入node.js的http模块,然后定义主机地址,端口号,然后用createServer方法创建一个服务器,传入req 请求对象,res 响应对象 ,然后res.writeHead定义响应头,再定义相应体内容并且用end结尾,然后监听定义好的1337端口,和主机地址并执行回调函数 console.log(`Server running at http://${hostname}:${port}/`);
4.node.js的初使用--理解回调函数
回调函数就是把执行的函数作为参数传到另一个函数里面调用,有三种调用形式:
1. 对象调用,举例:
function a() { console.log("hello") };
function b(callback) { callback();console.log('world') }
b (a)