一、Node.js的组成、基础语法
一、Node.js的组成、基础语法
3.1 Node.js 的组成
JavaScript
由三部分组成,ECMAScript
+DOM
+BOM
Node.js
是由ECMAScript
+Node环境提供的附加API组成的
,包括文件、网络、路径等更强大的API
3.2 Node.js 的基础语法
语法核心:ECMAScript
比如什么基本的let、const、var、for...in,if-else,console.log
等
下面来简单运行一下
比如,我在目录E:\A_Study\Node_Study\Day01
下新建一个文件httpServer.js
var http=require('http')
http.createServer(function(request,response){
response.writeHead(200,{
'Content-Type':'text/plain'});
response.end('Hello node\n');
}).listen(8888);
console.log('Server running at http://127.0.0.1:8888/');
在E:\A_Study\Node_Study\Day01
文件夹下按住Shift
键,再点击右键,打开Windows PowerShell
运行命令
node httpServer.js
用Node.js 创建一个Http Server,当访问http://127.0.0.1:8888/
时,可以看到 Hello Node
被打印出来了
命令行使用小技巧:
1、在文件夹下直接打开当前目录的运行窗口:文件夹按住Shift键、右击打开Windows PowerShell
2、清除所有的log:使用clear命令
二、模块化开发
3.4 Node.js 模块化开发
再讲模块化开发之前,先来讲下JavaScript开发的两大弊端:
- 文件依赖:比如开发轮播图时,先用到
slider.js
,而slider.js
依赖于scroll.js
,而scroll.js
又依赖于JQuery.js
- 命名冲突:比如先引入的
a.js
中定义了num =10
,后引入的b.js
中也有num=50
,这是命名相同的num
会被后者覆盖。
那么模块化开发可以很好地解决上面的两个弊端。
模块化开发:一个功能就是一个模块,多个模块可以组成完整的应用,抽离一个模块不会影响其他功能的运行。
- 在Node.js中,规定一个JavaScript文件就是一个模块,模块内部定义的变量和函数,默认情况下在外部无法得到
- 模块内部可以使用
exports
对象进行成员导出,使用require
方法导入其他模块
具体示例:
a.js
// 定义变量
let version=1.0
// 定义方法
const sayHi= name=>console.log('Hi!'+name)
// 向模块外部导出数据
exports.version=version
exports.sayHi=sayHi
b.js
let a=require('./a.js') // 在 b.js中导入模块a
console.log(a.version) // 输出b.js 的version 变量
console.log(a.sayHi('huahua')) // 调用b.js中的sayHi方法
结果:
导出方式:
exports
对象导出module.exports
对象导出
exports
是module.exports
的别名(地址引用关系),即下面两种写法等价
exports.version=version;
module.exports.version=version;
但如果exports
和module.exports
分别指向不同地址时,最终导出的结果为module.exports
所导出对象,导出对象最终以module.exports
为准。
//module.exports.js
const x=1;
exports.x=x;
module.exports={
name:'张三'
}
//b.js
const a=require('./module.exports.js')
console.log(a)
//{
name:'张三'}
3.5 系统模块
3.5.1 什么是系统模块?
Node运行环境提供的API,因为这些API都是以模块化的方式进行开发的,所以Node运行环境提供的API为系统模块。
3.5.2 系统模块fs文件操作
const fs=require('fs');
1. 读取文件 readFile
[,'文件编码']
为可选项
fs.readFile('文件路径/文件名称'[,'文件编码'],callback);
//readFile.js
//通过require('fs') 对模块进行引用
const fs=require('fs')
fs.readFile('file.txt',function(err,doc){
//如果文件读取错误 参数err的值为错误对象,否则err的值为null
if(err) return console.error(err);
if(err=null){
//文件读取成功,err为null
console.log(doc.toString());//doc参数为文件内容
}
})
console.log('程序执行结束')