node模块化,操作文件

一、什么是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;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值