1、什么是Node.js
Node.js Everywhere
我们可以从官网的介绍来分析:node中文网 | node引文网
Node.js® 是一个基于 Chrome V8 引擎 的 JavaScript 运行时。
浏览器引擎可以解析并执行js,google的v8引擎速度很快,所以node.js可以在脱离浏览器的情况下解析并执行js代码。
我们平常所用的js为浏览器中的js,而node.js可以看做服务端的js,所以node.js不是一门新语言也非新框架,而是js运行时。
可以简单的将node.js理解为使用js语言进行web服务器开发。(为了实现这些功能,node.js提供了一些特别的api)
node.js使用事件驱动、非阻塞I/O模型使得其轻量、高效。
node.js的包生态系统,npm是世界上最大的开源库生态系统。
绝大多数javascript包都存放在了npm上,以方便开发者安装使用。
2、Node.js能做什么Web服务器后台
命令行工具(如npm、git等都属于命令行工具,对于前端开发来说使用最多的也是node.js提供的命令行工具)
3、使用命令行解析js文件写一个简单的js文件,
var str = 'hello node'; conole.log(str);随意命名,比如hello.js。(注意,不能使用node.js命名,否则会打开文本而不会解析执行)
然后在文件存放处打开命令行,使用node指令执行即可:
我们已经知道Node可以解析js文件了,而js也可以进行web服务器搭建,所以我们只需要使用Node.js提供的相关api来搭建服务器,再用命令行去解析执行即可。
//类似我们需要使用某些对象一样,需要使用关键字进行New,在Node.js中我们使用require()方法进行模块加载(Node中的模块就相当于具有特殊功能的对象) //要构建一个web服务器需要使用http模块 var http = require('http'); //使用http模块创建webServer var server = http.createServer(); //设置端口号 server.listen(8888,function(){ console.log("端口号启用成功!"); }); //服务器request事件:请求时触发 server.on('request',function(request,response){ console.log("已经收到请求!"+'请求路径为:'+request.url);//一些请求信息 response.write("雷好,我系~渣渣辉!");//响应 response.end("该干嘛干嘛去");//告知浏览器响应结束,不必等待 }); console.log("webServer at localhost://88888");然后我们打开浏览器输入:localhost://8888或127.0.0.1://8888就可以访问了。
总结一下:
Node.js的一些特殊功能,比如创建服务器,是普通js没有的,我们把这些具有特殊功能的对象称作模块,要使用这些模块,需要使用require()方法进行裁入。
http模块可以创建服务器。使用createServer([options][, requestListener])方法可以创建并返回一个服务器对象,然后我们就可以进行相应设置。
服务器的listen()方法为服务器设置端口号。
服务器对象有很多事件,比如request事件在浏览器请求该服务器时触发,利用回调函数可以进行request处理和response响应。
response.end()方法告知浏览器响应结束,否则浏览器会一直等待响应。
响应数据只能是二进制数据或字符串。
5、Node.js中的JavaScriptEcmaScript(不包含BOM、DOM)
核心模块
第三方模块
自定义模块
5.1核心模块Node.js为JavaScript提供了很多服务器级别的api,这些api绝大多数都被包装到了一个具名的核心模块中,比如:
文件操作的fs(File System)模块、http服务创建的http模块、路劲操作的path模块、操作系统信息的os模块等。
而我们需要使用这些核心模块就需要使用require()方法进行获取。
Node.js中的模块有三种:
具名的核心模块
第三方模块
自定义模块
其中用户自定义的模块又叫文件模块,也就是那些js文件。
我们知道,在命令行中node指令只能编译执行一个js文件,但是我们的项目不可能只有一个js文件,同样的,js文件也是模块,所以我们需要在某个文件中使用require()方法解析执行文件模块。
比如我现在有以下三个js文件:
执行结果如下:
值得注意的点:
在Node.js中没有全局作用域,只有文件作用域。也就是说每个js文件的作用域都是分离的,互不影响。
相对路劲必须写./;文件后缀可以省略。