node.js 笔记
文章目录
- node.js 笔记
- 模块化
- 内置模块使用实例:
- 1. 文件系统模块
- - 引入:const 实例名 = require('模块名');
- - 读取文件内容:
- - 往文件写入内容:writeFile
- - 往文件中追加内容:appendFile
- - 复制文件内容:fs.copyFile('复制对象文件','粘贴对象文件',err=>{});
- - 删除文件:fs.unlink('删除路径',err=>{})
- - 文件重命名:fs.rename('原命名文件路径','新命名文件路径',err=>{});
- - 创建文件夹: fs.mkdir('文件夹相对路径',err=>{})
- - 删除文件夹:fs.rmdir('文件相对路径',err=>{})
- - 读取文件夹内容:fs.readdir('文件相对路径',(err , data)={})
- - 判断文件(文件夹)是否存在:fs.access('相对路径',err=>{})
- - 查看文件(文件夹 )状态,判断当前路径是文件还是文件夹
- 2.路径管理模块:path
- 3.http模块:http
- npm:包管理器
- Express :
- node内置函数:
- 运行node文件
- node + js 文件名
- node + 拖动文件到终端
模块化
介绍:
与普通的前端js文件不同,每一个js文件都是一个独立的模块,默认情况下,模块之间没有关联,不能进行数据交换。
以前“模块化”是后端的概念,前端是没有模块化的。从ES6开始,前端也有模块化。
模块化运用:
① 前端运用
1.避免文件之间变量混乱,互相影响:type=“module”
//两个文件相互独立,变量互不影响
<script src="./a.js" type="module"><script/>
<script src="./b.js" type="module"><script/>
-
注意:不可以直接用打开html文件,要用服务器的方式打开
方法一:(vscode)安装live server 插件,在HTML文件代码界面右键“open with live server”
2.实现 js中加载其他的js文件:import ‘相对路径’
// index.js
import './js/a.js'
- 运用:实现只有一个index.js 出口,其他js文件引入到index.js文件中
3.在js文件中访问其他js文件的变量:
-
方法一: 统一 暴露,引入
ps:只能有一次暴露和引入。
暴露 ------ export default
// a.js let a = 1; function foo(){ console.log('111'); } //暴露 export default { a : 1,//暴露参数 foo : foo //暴露函数 }
引入 ------ import 形参 from ‘相对路径’
import ObjA from './a.js'; //参数运用 console.log(objA.a); //函数运用 ObjA.foo();
-
方法二:分开暴露,引入
ps:单独暴露,分开引入
暴露:export
//暴露参数 export var a = 1; //暴露函数 export function foo(){ console.log('hello'); }
引入:import{多个实参 } from ‘相对路径’
ps:实参!!!名字和引入文件定义的一样的!不是自定义的!!!!
import {a, foo} from './a.js';
ps:自定义命名:import {实参 as 自定义形参} from ‘相对路径’;
import {a as name, c} from './a.js'; console.log(name); //自定义命名的意义:解决与当前文件有相同参数名的情况 var c = 1;//Uncaught SyntaxError: Identifier 'c' has already been declared
② 后端运用(node.js)
1.在js文件中引入js文件:require();
require('相对路径');
注意:
- require会进行缓存,除了第一次加载会运行文件,后续相同文件的加载都会从缓存中提取文件内容,不会再运行
- node中js文件引入时,js文件后缀可以去掉:require(‘a’);
2.在js文件中引入其他文件的函数、参数
暴露:
-
方法一:
module.exports.num = num;//参数 module.exports.foo = foo;//函数
-
方法二:
module.exports = { num, foo }
引入:
-
方法一:
const aJS = require('./a.js'); console.log(aJS.a); aJS.foo();
-
方法二:
const {num , foo} = require('./a.js');
自定义命名
const {num, foo, name:b} = require('./a.js'); console.log(name);
3.引入内置模块:const 命名 = require(‘模块名’);
//引入文件系统模块
const fs = require('fs');
内置模块使用实例:
1. 文件系统模块
- 引入:const 实例名 = require(‘模块名’);
//引入文件系统模块
const fs = require('fs');
- 读取文件内容:
- 异步读取 :实例名.readFile(‘文件相对路径’,‘utf-8’,function(错误信息,文件内容){})
//异步读取
fs.readFile('./a.js','utf-8',function(err,data){
console.log('err',err);
console.log('err',data);
})
-
同步读取:
const result = 实例名.readFileSync(‘文件相对路径’,‘utf-8’);
//同步读取
try{
const result = fs.readFileSync('./a.js','utf-8');
console.log('获取成功',result);
}catch(err){
console.log('获取失败!',err);
}
- 往文件写入内容:writeFile
- 新内容会将旧内容覆盖
- 如果文件不存在,则会自动创建文件,但是不会创建文件夹,此时Boolean(err)== true / 同步写入失败
//异步写入
fs.writeFile('./test.txt','这是新加入内容',function(err){
if(err){
console.log('写入失败');
}else{
console.log('写入成功');
}
})
//同步写入
try{
fs.writeFileSync('./test.txt','这是同步写入的内容')
}catch(err){
console.log('同步写入失败');
}
- 往文件中追加内容:appendFile
- 用法与写入一致
- 复制文件内容:fs.copyFile(‘复制对象文件’,‘粘贴对象文件’,err=>{});
- 复制对象文件不存在会报错
- 粘贴文件不存在会自动创建,但涉及到不存在的文件夹则无法创建,会报错
- 同步:copyFileSync
- 删除文件:fs.unlink(‘删除路径’,err=>{})
- 文件重命名:fs.rename(‘原命名文件路径’,‘新命名文件路径’,err=>{});
- 可以俩个文件的路径不一样,相当于文件移动
- 创建文件夹: fs.mkdir(‘文件夹相对路径’,err=>{})
- 不可创建两层文件夹
- 删除文件夹:fs.rmdir(‘文件相对路径’,err=>{})
- 只能删除空的文件夹
- 读取文件夹内容:fs.readdir(‘文件相对路径’,(err , data)={})
- 判断文件(文件夹)是否存在:fs.access(‘相对路径’,err=>{})
- 同步操作:fa.accessSync(); fs.existsSync();
- 查看文件(文件夹 )状态,判断当前路径是文件还是文件夹
//stats.isFile(); 用于判断是否为文件
//stats.isDirection();用于判断是否为文件夹
fs.stat('路径', (err,stats)=>{
if(err){
console.log('查看失败,没有找到');
}else{
const isFile = stats.isFile();
const isDir = stats.isDirectory(); console.log(`isFile:${isFile},isDirectory:${isDir}`);
}
})
2.路径管理模块:path
tip: 获取当前路径: __dirname
- 引入
const path = require('path');
- 获取指定路径的最后一部分:baseName();
const myPath = 'e:\\桌面\\练习\\node.js学习\\课程学习\\learn.js';
console.log(path.basename(myPath));//learn.js
- 获取除了baseName 的路径:dirname();
const myPath = 'e:\\桌面\\练习\\node.js学习\\课程学习\\learn.js';
console.log(path.dirname(myPath));
//e:\桌面\练习\node.js学习\课程学习
- 获取文件扩展名:extname();
const myPath = 'e:\\桌面\\练习\\node.js学习\\课程学习\\learn.js';
console.log(path.extname(myPath));
//.js
- 路径拼接:
-
相对路径:join();
-
绝对路径:resolve();
console.log(path.join('a','b','..','c')); // a/c console.log(path.resolve('a','b','..','c')); // E:\桌面\练习\node.js学习\课程学习\a\c
- 路径拆分:parse();
const myPath = 'e:\\桌面\\练习\\node.js学习\\课程学习\\learn.js';
console.log(path.parse(myPath));
/***
{
root: 'e:\\',
dir: 'e:\\桌面\\练习\\node.js学习\\课程学习',
base: 'learn.js',
ext: '.js',
name: 'learn'
}
***/
3.http模块:http
- 引入
const http = require('http');
- 搭建一个简单的服务器
const http =require('http');
//req:请求数据和方法
//res:响应
const app = http.createServer(function(req, res){
res.write('hello');//写返回值
res.end();//响应返回值
})
// 设置端口号(0~65535)尽量设置在3000以上,免得被本地应用占用
app.listen(3000,()=>{
console.log('3000端口启动成功');
});
-
启动服务器:运行该node文件
-
获取本地ip地址: window+ R 打开 cmd,输入ipconfig
-
打开服务器:在浏览器输入:ip地址 + 端口号(如:http://192.168.1.126:3000)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iGj6IMqF-1644725754770)(文档图片/image-20211123222103866.png)]
npm:包管理器
-
用户可以从npm服务器上面下载别人编写的第三方包到本地使用
-
用户可以将自己编写的包上传到npm服务器上供别人使用
安装:不需要单独安装,安装node.js时同时安装
检查版本:npm- v
基本使用(项目根目录):
- 下载包:
- 局部下载(项目内下载)
npm install 安装包名称 --save
//简写
npm i 安装包名称 --save
- 全局下载
npm i 安装包名称 -g
-
node_modules文件: 放置 npm下载下来的包
-
package-lock.json文件:记录npm下载详细日志
-
package.json文件:项目记录文件,包含了项目的名称,版本号,以及项目的依赖文件版本信息等。需要自己创建:
npm init //全部默认 npm init -y
-
一键安装当前项目(package.json文件中记录的)依赖
npm i //npm install
-
删除包
npm uninstall 包名称
- 使用包:
- 前端:复制文件并正常引入
- 后端:js文件中,const name = require(‘name’);
Express :
基于node.js平台的服务端框架
Express应用程序生成器:express-generator
-
用于帮助开发者快速创建一个express项目
-
全局安装:
npm i express-generator -g
创建Express项目:
-
在cmd中,进入路径创建文件
express 项目文件名
-
进入项目,安装依赖
npm i
-
启动项目:
npm start
说明:端口号(默认3000):在 bin>www 文件 中设置
//运行报错如下:表示端口号已被占用,关闭正在运行的3000端口项目或改变当前项目的端口号 Debugger attached. Port 3000 is already in use Waiting for the debugger to disconnect...
-
打开项目:
localhost:端口号
说明:启动成功后需要自行生成地址(以下是启动成功截图)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9joKcGjr-1644725754771)(文档图片/image-20211124132813070.png)]
默认显示:localhost:端口号/index.html
Express项目文件解读:
(标*为会写代码的地方)
- bin:包含www文件,搭建好的服务器,一般不做改动
- node_modules: 存放 npm下载的包
- ***public: 前端开发代码文件
- public文件名不可以改
- 里面的imgages,javascript文件等可以进行修改和删除,
- html文件一般不需要统一放置在文件夹里
- ***routes: 处理前端axios请求
- views: 模板引擎–在后端写页面(对首页渲染要求比较高的时候使用)
- package-lock.json文件:记录npm下载详细日志
- package.json文件:项目记录文件,包含了项目的名称,版本号,以及项目的依赖文件版本信息等
- ***app.js:
- require:引入模块
- var app = express(); 创建express实例
- set :设置
- use:使用工具,错误处理
- module.export = app ; 将配置暴露出去(www文件)
项目其他配置:
更改node的启动命令:
- 方法一:npm start == > node app.js
//app.js文件
//module.exports = app;
app.listen(3000,()=>{console.log('3000端口启动成功')});
-
方法二: npm start == > nodemon app.js
-
全局安装nodemon :
npm i nodemon -g
-
app.listen(3000,()=>{console.log('3000端口启动成功')});
-
只需要运行一次,代码重新保存时会自动重启服务器
-
笔记:
-
./users/login: users 为一级路径(routes文件里的js文件,需要在app.js注册)
login 为二级路径,写在一级路径js文件里,无需注册
-
post请求,后端获取前端传来参数:
req.body
get请求,后端获取前端传来参数:
req.query
node内置函数:
some和every:
every()是对数组中每一项运行给定函数,如果该函数对每一项返回true,则返回true。
some()是对数组中每一项运行给定函数,如果该函数对任一项返回true,则返回true。
// https://www.jianshu.com/p/c80e0938e3e5
文章目录
- node.js 笔记
- 模块化
- 内置模块使用实例:
- 1. 文件系统模块
- - 引入:const 实例名 = require('模块名');
- - 读取文件内容:
- - 往文件写入内容:writeFile
- - 往文件中追加内容:appendFile
- - 复制文件内容:fs.copyFile('复制对象文件','粘贴对象文件',err=>{});
- - 删除文件:fs.unlink('删除路径',err=>{})
- - 文件重命名:fs.rename('原命名文件路径','新命名文件路径',err=>{});
- - 创建文件夹: fs.mkdir('文件夹相对路径',err=>{})
- - 删除文件夹:fs.rmdir('文件相对路径',err=>{})
- - 读取文件夹内容:fs.readdir('文件相对路径',(err , data)={})
- - 判断文件(文件夹)是否存在:fs.access('相对路径',err=>{})
- - 查看文件(文件夹 )状态,判断当前路径是文件还是文件夹
- 2.路径管理模块:path
- 3.http模块:http
- npm:包管理器
- Express :
- node内置函数: