一、什么是node?
基于chrome V8引擎的JavaScript运行环境。
js:运行在浏览器 开发前端程序
node:运行在服务器 开发后端程序
静态页面:数据都是写死的。HTML+CSS+JS
动态页面:数据都是动态的。HTML+CSS+JS+后端接口
对于node来说
只有ECMAScprit,没有BOM和DOM,不过多了一些文件操作和IO流等等功能。
node执行js:
在命令窗口:使用 node js文件的路径 按下回车即可。
为什么要学习node?
中小型项目快速开发
全栈:前端,后端都可以做,全干
招聘时有些公司要求
node中文网站
node中文网站:点击链接: nodejs
安装步骤
下一步直到结束
判断是否成功:
命令行或者终端下使用 node --version
如果成功显示版本号说明node安装成功了。
二、模块化
面临的问题
如果你是未使用模块化之前的毕业生,你在接收项目时,可能会遇到的问题:
1. 变量名冲突:不同文件中的变量如果重名,前面的会被后面的覆盖,造成程序的执行错误。
2. 文件依赖顺序:多个文件之间如果存在依赖关系,需要保证加载顺序的准确。
什么是模块化
模块化本质:就是一个实现特定功能的js文件。
模块化开发:是一个管理方法,是一种生产方式,解决问题的方案。
模块化可以让我们更方便的使用已经写好的代码,想要实现什么功能,就加载什么模块,就好像积木。需要拼接什么形状,就使用相应的积木。
模块化的方案
1. 闭包和函数作用域
//利用闭包和自执行函数
var 模块名 = (function(){
....
return {
变量1,
变量2
}
})(引入其他的模块名...)
模块名.变量
这种方法是所有模块化的基础。
1. 各个文件之间避免了变量名的冲突。
3. 减少了全局变量。
4. 模块的外部无法修改闭包内部的变量,增加程序的稳定性。
5. 明确了依赖关系。
2. ES6模块化
在ES6之间,是没有模块化的概念的,如果要使用模块化的操作:一种是闭包+自执行函数,一种是引入第三方的类库。
ES6第一次支持了模块化,多个两个模块:
export 导出
import 导入
export 变量的声明赋值
import {变量名} from “模块路径”
【注意】在引入模块文件时,需要在script标签中添加type属性,属性值为 module。 如果需要抛出多个变量名,则可以将这些变量包装成对象输出。如果不想暴露模块中的变量名,可以通过as来操作。
var aNum = 10;
var aStr = "a";
export {
aNum as num,
aStr as str
}
接收
import {num,str} from "./a.js";
console.log(num,str);
默认导出
//一个模块只能有一个默认导出,对于默认导出,导入的名称可以和导出的名称可以不一样。
export default function(){
console.log("此去泉台招旧部,旌旗十万斩阎罗");
}
import 导入名 from "./a.js";
导入名();
可以导出对象
export default {
fn(){
console.log("此去泉台招旧部,旌旗十万斩阎罗");
},
age:18
}
import 导入名 from "./a.js";
导入名.fn();
console.log(导入名.age);
基础导出和默认导出
export default {
fn(){
console.log("此去泉台招旧部,旌旗十万斩阎罗");
},
age:18
}
export let userName = "zhangsan"
import ss,{userName} from "./a.js";
ss.fn();
console.log(ss.age);
console.log(userName);
exports可以多次导出,但是module.exports只能导出一次,多次导出最后一次生效。
exports和module.exports本质是相等的。
exports是一个引用,指向的是module.exports
如果在同一个文件中使用两种导出,给exports添加的属性和方法,也会添加在module.exports上,但是添加在module.exports上的属性和方法,不会添加在exports上。
node的模块大致可分为三大类
1. 内置模块(nodejs原生提供的)可以直接使用。
2. 自定义模块 (需要手动的导出)
3. 第三方模块(需要下载安装然后才可以使用)
自定义模块:
定义模块:
通过module.exports = {} 导出模块
通过exports.属性名 = value 导出模块
引入模块
const 变量名 = require("模块路径")
三、操作文件
node可以操作文件,可以创建服务器,可以连接数据库等等。
读取文件:
1. 引入fs内置模块
2. 调用readFile方法
3. 指定读取文件的路径
4. 指定读取的编码
5. 回调函数 读取的时候执行的操作。
6. err 是读取失败时的错误信息 如果成功执行,则err为null
7. data 是读取的内容。
文件读取
//文件读取:readFile
const fs = require("fs");
// readFile 方法 是读取文件中的内容
fs.readFile("./b.txt",'UTF-8',function(err,data){
console.log("错误信息为"+err);
console.log("读取到的内容为"+data);
})
文件写入
//文件写入:writeFile
const fs = require("fs");
let data = "hello world";
// writeFile 方法是写入,覆盖式 第一个参数:写入文件的路径
// 第二个参数:写入的内容。
// 第三个参数:一个函数,写入完成后执行. err表示错误信息,如果成功执行,则err为null
fs.writeFile("./a.txt",data,function(err){
if(err){
console.log(err);
}
})
文件读写
//文件读写:readFile
const fs = require("fs");
fs.readFile("./a.txt","utf-8",function(err,data){
if (err) {
console.log("读取失败:"+err);
return;
}
fs.writeFile("./b.txt",data,function(err){
if (err) {
console.log("写入失败:"+err);
}
})
})
删除文件
//删除文件:rename
const fs = require("fs");
fs.rename("./b.txt","c.txt",function(err){
if (err) {
console.log("重命名失败"+err);
} else {
console.log("重命名成功");
}
})
创建文件
//创建文件:mkdir
const fs = require("fs");
fs.mkdir("a.txt",function(err){
if (err) {
console.log("创建失败"+err);
} else {
console.log("创建成功");
}
})
重命名
//重命名:mkdir
const fs = require("fs");
fs.mkdir("a.txt",function(err){
if (err) {
console.log("创建失败"+err);
} else {
console.log("创建成功");
}
})
路径模块
// 路径模块:包含了一系列处理和转换文件路径的工具集合。
// 为什么要使用路径模块?
// 当前文件在window下:E:\h5\代码\03_node_mysql_ajax\02
// window 文件的分隔符是 \ / 在Linux下只有/
/**
* path.join()
* 作用:拼接路径
* 静态资源:HTML CSS 图片
*
*/
const path = require("path");
let filePath = path.join("static","img","03","bg.png");
console.log(filePath);
// 输出结果:static\img\03\bg.png
// 如果是Linux 输出结果:static/img/03/bg.png
/**
* __dirname
* 获取当前文件所在的绝对路径
*
*/
//在node中,操作文件时需要使用绝对路径,引入模块时使用相对路径
//node中,相对路径不是按照当前文件来执行的,而是按照命令行所在的目录下。
const path = require("path");
const fs = require("fs");
fs.readFile(path.join(__dirname,"a.txt"),"utf-8",function(err,data){
if (err) {
console.log("读取失败:"+ err);
}else{
console.log("读取的内容:"+ data);
}
})
/**
* path.extname(文件路径)
* 作用: 获取文件的后缀名
* /
let ext = path.extname(path.join(__dirname,"a.txt"));
console.log(ext);
//输出结果 .txt;