0
点赞
收藏
分享

微信扫一扫

node 随记

火热如冰 2022-02-13 阅读 62

node.js 笔记

文章目录

  1. 运行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');
- 读取文件内容:
  1. 异步读取 :实例名.readFile(‘文件相对路径’,‘utf-8’,function(错误信息,文件内容){})
//异步读取
fs.readFile('./a.js','utf-8',function(err,data){
    console.log('err',err);
    console.log('err',data);
})
  1. 同步读取:

    const result = 实例名.readFileSync(‘文件相对路径’,‘utf-8’);

//同步读取
try{
	const result = fs.readFileSync('./a.js','utf-8');
    console.log('获取成功',result);
}catch(err){
    console.log('获取失败!',err);
}
- 往文件写入内容:writeFile
  1. 新内容会将旧内容覆盖
  2. 如果文件不存在,则会自动创建文件,但是不会创建文件夹,此时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
  1. 用法与写入一致
- 复制文件内容:fs.copyFile(‘复制对象文件’,‘粘贴对象文件’,err=>{});
  1. 复制对象文件不存在会报错
  2. 粘贴文件不存在会自动创建,但涉及到不存在的文件夹则无法创建,会报错
  3. 同步:copyFileSync
- 删除文件:fs.unlink(‘删除路径’,err=>{})
- 文件重命名:fs.rename(‘原命名文件路径’,‘新命名文件路径’,err=>{});
  1. 可以俩个文件的路径不一样,相当于文件移动
- 创建文件夹: fs.mkdir(‘文件夹相对路径’,err=>{})
  1. 不可创建两层文件夹
- 删除文件夹:fs.rmdir(‘文件相对路径’,err=>{})
  1. 只能删除空的文件夹
- 读取文件夹内容:fs.readdir(‘文件相对路径’,(err , data)={})
- 判断文件(文件夹)是否存在:fs.access(‘相对路径’,err=>{})
  1. 同步操作: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
- 路径拼接:
  1. 相对路径:join();

  2. 绝对路径: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

    image-20211123221733515
  • 打开服务器:在浏览器输入: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
  1. node_modules文件: 放置 npm下载下来的包

  2. package-lock.json文件:记录npm下载详细日志

  3. package.json文件:项目记录文件,包含了项目的名称,版本号,以及项目的依赖文件版本信息等。需要自己创建:

    npm init
    //全部默认
    npm init -y
    
  4. 一键安装当前项目(package.json文件中记录的)依赖

    npm i
    //npm install
    
  5. 删除包

    npm uninstall 包名称
    
- 使用包:
  • 前端:复制文件并正常引入
  • 后端:js文件中,const name = require(‘name’);

Express :

基于node.js平台的服务端框架

Express应用程序生成器:express-generator
  • 用于帮助开发者快速创建一个express项目

  • 全局安装:npm i express-generator -g

创建Express项目:
  1. 在cmd中,进入路径创建文件 express 项目文件名

  2. 进入项目,安装依赖 npm i

  3. 启动项目:npm start

    说明:端口号(默认3000):在 bin>www 文件 中设置

    //运行报错如下:表示端口号已被占用,关闭正在运行的3000端口项目或改变当前项目的端口号
    Debugger attached.
    Port 3000 is already in use
    Waiting for the debugger to disconnect...
    
  4. 打开项目:localhost:端口号

    说明:启动成功后需要自行生成地址(以下是启动成功截图)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9joKcGjr-1644725754771)(文档图片/image-20211124132813070.png)]

​ 默认显示:localhost:端口号/index.html

Express项目文件解读:

(标*为会写代码的地方)

  • bin:包含www文件,搭建好的服务器,一般不做改动
  • node_modules: 存放 npm下载的包
  • ***public: 前端开发代码文件
    1. public文件名不可以改
    2. 里面的imgages,javascript文件等可以进行修改和删除,
    3. html文件一般不需要统一放置在文件夹里
  • ***routes: 处理前端axios请求
  • views: 模板引擎–在后端写页面(对首页渲染要求比较高的时候使用)
  • package-lock.json文件:记录npm下载详细日志
  • package.json文件:项目记录文件,包含了项目的名称,版本号,以及项目的依赖文件版本信息等
  • ***app.js:
    1. require:引入模块
    2. var app = express(); 创建express实例
    3. set :设置
    4. use:使用工具,错误处理
    5. 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

    1. 全局安装nodemon :npm i nodemon -g

    2. app.listen(3000,()=>{console.log('3000端口启动成功')});
      
    3. 只需要运行一次,代码重新保存时会自动重启服务器

笔记:
  • ./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

文章目录

举报

相关推荐

随记

随记(一)

git随记

随记_Vlan

Mongodb随记

【PHP 随记】—— 目录

输入错误随记

【技术随记05】

0 条评论