认识node.js
JavaScript作为一门编程语言的要素,包括基本类型和变量、函数和对象等,都与其他编程语言无异。
// JavaScript的最大缺陷在于它是专门为了在浏览器中运行而设计的,在设计之初没有考虑到和I/O设备交互的情形。
// 为了让JavaScript能够直接在本地机器上运行并利用所有资源,Node对JavaScript做了大量拓展。
// 包括模块系统、文件系统、流处理以及多进程支持。
使用node.js的过程
1.在代码文件夹中,【新建js文件】(不要新建成html),里面写任意js代码。
2.来到代码文件夹,在上面的路径处输入【cmd】,就弹出了小黑窗。
3.输入【node 文件名】,就能执行代码。
注意:
node -v:查看node下载版本.
文件名太长,可以输入一半,按tab键补足.
按方向键↑,可以切换到上一条敲过的命令.
模块化的概念:
把一个大的程序拆分成相互依赖的n个小文件
这些小文件还可以通过特定的语法组合到一起
这个过程称之为模块化
优点:
避免命名冲突(减少命名空间污染)
更好的分离,按需加载
更高复用性
高可维护性
模块化的规范:
在require.js中,使用require.js提供的函数require()来应用一个模块
每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。
在服务器端,模块的加载是运行时同步加载的。在浏览器端,模块需要提前编译打包处理。
[特点]
所有的代码都运行在模块作用域,不会污染全局作用域。
模块可以多次加载,但是只会在第一次加载是运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。
模块加载的顺序,按照其在代码中出现的顺序。
[语法]
暴露模块
module exports = value
exports xxx = value
引入模块
require(xxx)
在第三方模块中,xxx为模块名。在自定义模块中,xxx为模块文件路径。
// [内置模块fs]
// node提供了一个内置模块叫fs(filesystem),专门用来操作文件的。
// 可以读取一个文件的内容,也可以把内容写入到一个文件。
// 导入模块
require('模块名')
// const fs = require('fs') (一般会定义一个变量名接收)
// 读取文件
fs.readFile('文件的路径',(err,data) => {
// 不管是读取成功,还是读取失败,都会调用这个回调函数。
// 如果读取失败,err里就会有错误信息。
// 如果读取成功,err为空,data里就会有读取的内容
})
// 写入文件
fs.writeFile('文件的路径',写入的内容,err =>{
// 写入完成调用的回调函数。
// 如果成功err就为空,如果失败err就有值。
})
// 追加文件内容
fs.appendFile('路径','要追加的内容',err => {
if(!err){
console.log('追加成功');
}
})
// 拷贝文件
fs.copyFile('要拷貝的文件路徑','目標文件的路徑')
// 刪除文件
fs.unlink('文件路徑',err => {
if(!err) {
console.log('刪除成功');
}
})
// 导入fs模块
const fs = require('fs')
// 封装添加狗狗的方法
function addDog(dog = '哈士奇') {
// 先读取原本的内容
fs.readFile(__dirname + '../data/dogs.json', (err, data) => {
// fs.readFile('../data/dogs.json', (err, data) => {
// fs.readFile('./data/dogs.json', (err, data) => {
// 读取成功
if (!err) {
// console.log(data);
// JSON通常用于与服务器交换数据。
// 在接收服务器数据时一般是字符串。
// 我们可以使用 JSON.parse() 方法将数据转换为JavaScript對象。
// console.log( JSON.parse(data) );
// 定义一个数组接收读取到的元素
const arr = JSON.parse(data)
// 向数组中增加元素
arr.push(dog)
// 向JSON文件写入数组元素
// 在向服务器发送数据时一般是“字符串”。
// 我们可以使用 JSON.stringify() 方法将JavaScript值轉化為JSON字符串。
fs.writeFile(__dirname + '../data/dogs.json', JSON.stringify(arr), err => {
// fs.writeFile('../data/dogs.json', JSON.stringify(arr), err => {
// fs.writeFile('./data/dogs.json', JSON.stringify(arr), err => {
if (!err) {
console.log('写入成功')
} else {
console.log('写入失败')
}
})
} else {
// 读取失败
console.log('读取失败')
}
})
}
// 封装的读取狗狗的方法
function readDog () {
// 读取
fs.readFile('../data/dogs.json',(err,data) => {
// fs.readFile('./data/dogs.json',(err,data) => {
// 如果每次就打印数组
if(!err){
console.log( JSON.parse(data) );
}else {
// 打印错误
console.log(err);
}
})
}
addDog('比熊')
// 模块内容暴露
module.exports = {
readDog,
addDog
}
// 导入dog模块
const dog = require('./module/dog.js')
dog.addDog('阿拉斯加',function(){dog.addDog('666')})
dog.readDog()
在小窗口执行node 加上该文件名,会在小窗口提示写入成功。
并在dogs.json文件夹中写入相应的数据