首页 > 编程语言 >node.js学习技巧

node.js学习技巧

时间:2023-03-05 15:12:39浏览次数:41  
标签:node const 技巧 err js console fse log

--save

=== 生产环境 dependencied
npm install xxx
npm install xxx --save
npm install xxx -S
npm i xxx -S

=== 开发环境 devDependencies
在 devDependencies 添加包
npm install --save-dev
npm install -D

package.json~^区别

~version大约相当于版本,将更新到所有未来的补丁版本,而不会增加次要版本

~1.2.3将使用从 1.2.3 <1.3.0

~1.2.*就是修复的版本

~version向后兼容的新功能

^2.3.4 <3.0.0的版本

^2.*.*这个形式

关闭端口

npm install -g kill-port关闭一个端口
kill-port 3208
关闭多个端口
kill-port 4208 3200

更强大的功能 fkil-cli

package-lock.json

对于npm修改 node_modules 树或者 package.json
它描述了生成的确切树,以便后续安装能够生成相同的树,而不管
中间依赖项更新如何

忽略整个存储库的差异,你可以添加到 .gitattributes

package-lock.json binany
yarn.lock binary

node.js 退出

process.exit(code)
代码结束进程
code = 0
成功的退出
code = 1
失败的条件退出
命令行退出
node //回车
.exit

package.json所有依赖都更新到最新版本

npm instatl -g npa-check-updates
ncu -U
npm install

process.argv

处理命令行的数组
第一个参数 node的位置信息
第二个参数 当前执行文件的位置信息
第三个到n 输入的多个参数用逗号分割

process.argy.slice(2)

node写入文件

const fs = require('fs')
fs.writeFile('./test','我是一个文件',err =>{
    if (err) {
        console.log('报错啦');
    }
})

// 或者
fs.writeFileSync('./test.text','我是一个文件',err=>{
    if (erm) {
        console.log('又报错啦')
    }
})

const stream = fs.createwriteStream('my_file.txt');
stream.once('open',()=>{
    stream.write('我是一个小文件123 \n')
    stream.write('我是一个小文件12333  \n')
    stream.end();
})

node 获取文件夹下的文件名

const fs = require('fs');
fs.readdir('./',(err,files)=>{
    //
})

fs.readdinSync('./')

获取文件夹下所有的目录

fse.readdir('./', {withFileTypes:true},(err,files)=>{
    const vals = files.filter(val => val.isDirectory()).map(dirent => dirent.name);
    console.log(vals);
})
// 同步
const vals = fse,readdirSync('./', {withFileTypes: true}).filter(val => val.isDirectory()).map(dirent=>dirent.name);

glob

使用 shell使用的模式匹配文件,比如星号和其他东西

const glob = require('glob');
glob('./test1/*.js',{},(er, files) => {
    console.log(er,files);
})

*0到多


?匹配1个


[]匹配一系列字符,跟正则类似


!(aaa|bbb)

module.exports

作为 require调用结果实际返回的对象

test6.js

const myFunc1 = () => {
    console.log(1);
}
const myFunc2 = () => {
    Console.log(2);
}
exports.myFunc1=myFunc1;
exports.myFunc2=myFunc2;

xx.js

const m = require('./test6');
m.myFunc1();
const {myFunc1}=require('./test6');
myFunc1();

如果你想公开一个函数或者一个变量

test6.js

const myFunc1 = () => {
    console.log(1);
}
module.exports = myFunc1

使用

express

const express = require('express');
const app = express();
app.get('/user/:id',(req, res,next) => {
    console.log(reg.url);
    // {id:111}
    console.Log(req.params);
    // ?id=2
    console.log(req.query.id);
    res.send('Hello World')
    next();
})
app.listen(3000)

node 请求接口

const axios=require('axios')
axios.get('http://127.0.0.1:3000/user/2').then(res=>{
    console.log(res.data);
})
// http://172.30.75.144:3800/usen/2

process.env

设置环境变量

prgcess.env.PORT || 3200
"scripts":{
    "start": "PORT=3000 node server.js"
}

判断文件是否存在

const isdtfe = path => {
    try {
        if (fs.existsSync(path)) {
            return true
        }
    }catch (_) {
    }
    return false
}
console.log(isdtfe('./package.json'));

目录不存在,创建目录

const fs = pequire('fs');
const dir ='./tmp';
if (!fs.existsSync(dir)) {
    fs.mkdirSync(dir)
}
// mkdir

查看文件执行文件

eval(fs.readFileSync('./test6.js')+'')

__filename dirname

filename

  • 当前模块的文件名,解析的是当前模块的绝对路径` (D:\caogao\express01.js)

__dirname

  • 当前模块的目录名(D:\caogao)

process.cwd()

  • 返回当前目录

拿到文件的地址,上级或者上上级

const path=require('path');
path.join(__dirname,'../../')
path.resolve(__dirname,'..')

拿到当前文件名

const path = require('path');
path.basename(__filename)

import

异步延迟加载

const fn =async()=>{
    const a = await import('./test6.js');
}

web 服务器

const express = require('express');
const app = express();
app.get('/',express.static(--dinname+'/public'))

app.listen(3000,()=>{
    console.log('启动了');
})

插件库
http-server

live-server

Buffer缓冲区

buffer是一个全局对象,不需要 require,

Buffer.from('Hello World').toString('base64')
Buffer.from('SGVsbG8gV29ybG0=','base64').toString('ascii')

下载文件

app.get('/download',(req, res) => {
    res.download(`${__dirname}/test1/1.js`)
})

请求的文件下载到本地

axios.get('http://127.0.0.1:3000/download').then(res => {
    const fileName = res.headers['content-disposition'].split('filename="')[1].slice(0, -1)
    fs.writeFile('./' + fileName, res.data,err=>{
        console.log(err);
    })
})

获取完整的url路径

req.protocol +'://' + req.get('host')+ reg.originalUrl

打印报错位置的信息

console.trace('测试1')

监听文件方法变化

npm install nodemon
nodemon app.js

用到 package.json

{
    "scpipts":{
        "start":"nodemon test8.js"
    }
}

ts-node运行ts文件

{
    "scripts":{
        "start-ts": "ts-node 100.ts"
    }
}

复制文件

fs.copyFile('test2.js','test2.js02',err => {
    console.log(err);
})

fs-extra
文件系统的方法,用于替代 fs fs 模块的所有方法都附加到 fs-extra

文件操作

copy文件夹(异步的)

const fse = pequire('fs-extra');
// 同步
fse.copy('./test1','./testCopy1',err=>{
    console.log(err);
}
// promise
fse.copy('./test1','./testCopy2').then(() => {
    console.log('成功');
    }).catch(err => {
        console.log(err);
    })
    try{
        fse.copy('./test1','./testCopy2')
    }
    catch(e){
        console.log(e);
    }

copySync(src,dest[,options]) 同步

添加过滤

fse.copy('./test1','./testCopy5', {
    filter: function (src, dest) {
        // 复制的位置,复制后的所在位置
        console.log(src, dest);
        // 去复制的文件中有1.js
        if(src.includes('1.js')){
            return false
        }
        return true
    }
},
err =>{
console.log(err);
})

空目录(异步)

确保目录为空,如果不为空,则删除目录为空,如果该目录不存在,则会创建它,目录本身不会被删除

fse.emptyDir('./testCopy5',err=>{
    console.log(err);
});
.then().catch()

try{}catch{}

emptyDirSync

确保文件存在(异步)

别名 createFile

如果不存在,则创建这些目录和文件,如果存在则不做改变

fse.ensureFile('./testCopy4/test3/1.Js',err=>{
    console.log(err);
}

ensureFileSync(同步)

确保目录存在(异步)

别名: mkdirs(), mkdirp()
确保目录存在,如果不存在,则创建它

fse.ensureDir('./testCopy4/test5',err=>{
    console.log(err,'xxx');
})

ensureDirSync(同步)

确保链接存在(异步),类似复制黏贴

如果目录不存在则创建它,存在就报错,本质类似于复制黏贴
别名: createLink()

fse.ensureLink('./testCopy4/test3/1.js','./testCopy12/test3/2.js',err=>{
    console.log(err);
})

ensureLinkSync(同步)

移动(异步)

移动文件或者目录

fse.move('./testCopy4/1.js', './testCopy4/test108/2.js').then(() => {
    console.Loe("成功");
}).catch(err =>{
    console.log(err,'失败');
})

{overwrite:true} 默认为false,就是不覆盖

fse.move('./1.js','./testCopy4/test100/2.js', {overwrite: true})

moveSync(同步)

输出文件(异步)

writeFile类似,只是父目录不存在,则创建它,有的话,则覆盖

const file ='./testCopy4/test100/110.js';
fse.outputFile(file,'我是一个内容',err =>{
    console.log(err);
    fse.readFile(file,'utf8',(err,data)=>{
        console.log(err, data);
    })
})
==========
fse.outputFile(file,'我是一个内容').then(()=>fse.readFile(file,'utf8')).then(data=>{
    console.log(data);
})

outputFileSync(同步)

输出json文件(异步)

writeJson一样,不存在,则创建它

fse.outputJson(file, {name: 'xxx'}).then(()=> fse.readJson(file)).then(data =>{
    console.log(data);
}).catch(err=>{
console.log(err);
})

readJson
throws设置为false,当json无效不会抛出

fse.readIson(file, {throws: false}, (err, obj) => {
    console.log(err,obj);
})

writeJsonSync(同步)

readJsonSync(同步)

outputJsonSync(同步)

检测路径是否存在

fse.pathExists(file,(err,exists)=>{
    if (err) {
        return;
    }
    console.log(exists);// true 存在,false 不存在
})

pathExistsSync(同步)

删除

删除文件或者目录,如果路径不存在,则静默不执行

fse.remove('./testCopy4/test100',err=>{
    if (err) {
        console.log(err);
    }
})

removeSync(同步)

node内存不足

node --max-lod-spance-size=4096 xxx.js
1GB 1024
2GB 2048
3GB 3072
4GB 4096
5GB 5120
6GB 6144
7GB 7168
8GB 8192

获取IP

const {networkInterfaces} = require('os');
const getIp = () => {
    const ipObj = {};
    const nets = networkInterfaces();
    for (let name of Object.keys(nets)) {
        const item = nets[name];
        for (let item of nets[name]) {
            const familyV4Value = typeof item.family === 'string' ? 'IPv4' : 4;if (item.family === familyV4Value && !item.internal) {
                if (!ipObj[name]) {
                    ipObj[name] = [];
                }
                ipObj[name].push(item,address);
            }
        }
    }
    return ipObj
}
console.log(getIp());

使用库 npm install ip

const ip = require('ip');
ip.address();

哈希字符串

node内置模块

const crypto = require('crypto');
const hash = crypto.createHash('md5').update('我是谁').digest('hex');
console.log(hash);

const Readable = require('stream').Readable;
const s = new Readable();
s.push('我是一个Liud1123')
//流的结尾
s.push(null);
// 查春流
s.on('data',(data)=>{
    console.log(data);
}

逐行读取

fse.readFile(' ./test11.js', 'utf8',(err,files)=>{
    console.log(files.split('\r\n'));
})

在原有数据中新添加数据

fse.appendFile('./test11.js', '\r\n 我是一个新添加的一行')

设置 {flag:'a'}也可以在尾部添加

fse.writeFile('./test11.js', 'hello node', {flag: 'a'}, err =>{
    console.log(err);
})

拿到当前操作系统

process.platform
// 也可以使用os模块
const os = require('os');
os.platform()
返回值
darwin // MacOs
win32  win64 // Windons
linex/// Linux

文件扩展名

const path = require('path');
path.extname(__filename)

_filename.split('.').pop()

特定包是否已全局安装

npm List -g xxx
如果没有全局安装
输出返回为
D:\Program Files\nodejs
`-- (empty)

检查脚本是否在node.js 下运行

window 在node.js 中是没有对象的,所以我们可以判断他是在node环境下
if(typeof window === 'undefined'){
    exports.foo = {};
}else{
    window.foo = {};
}

nwjs

基于 Chromium和Node.js,让你直接从DOM/webWorker 调用所有Node.js模块

解压文件

archiver tar zip开箱即可支持

标签:node,const,技巧,err,js,console,fse,log
From: https://www.cnblogs.com/fangdongdemao/p/17180612.html

相关文章

  • 一文带你掌握轻量化模型设计原则和训练技巧!
    前言 本文将回顾轻量级模型的最新工作:EfficientFormer和TinyViT,分别从模型设计原则和模型训练技巧两个方面,对轻量化基础模型展开了详细的探索。本文转载自OpenMMLab作......
  • IT0009.Vue.js核心技术解析与uni-app跨平台实战开发
    IT0009.Vue.js核心技术解析与uni-app跨平台实战开发  自己一面看一面跟着打的代码,蛮大,其实很多都是npm的modules链接:https://caiyun.139.com/m/i?0V5Cg5LbWDJWD ......
  • js es6 判断数组对象中包含是否含有某个属性值
    if(data&&data.hasOwnProperty('Rows')){(data.Rows.Row||[]).map((row)=>{if(row.hasOwnProperty("Summary")){......
  • 6.手写JSON.stringify、JSON.parse ?
    JSON.stringifyJSON.stringify() 方法将一个JavaScript对象或值转换为JSON字符串,如果指定了一个replacer函数,则可以选择性地替换值,或者指定的replacer是数组,则可......
  • Three.js使用webWorker进行八叉树构建
    更新:经过一番尝试发现了这种方式的局限模型太大构建的八叉树结构也非常大一个10万个点的模型构建的八叉树在控制台内存中居然有150M而主线程在接受大量数据的时候又产生......
  • Three.js使用WebWorker进行八叉树碰撞检测
    经过一番探索后还是采用了整个碰撞检测都交给worker来做​​原因​​如果是小的模型还是不需要这么做的js线程足够处理构建时的开销步骤将需要被检测的物体集合转换成可......
  • 高效自动化工具之在线json
    在开发过程中,遇到很多问题,其中特别棘手的一个问题,就是一些批量工作,该类工作非常重要,但是又没有技术含量。比如:批量给一个变量加上前缀;批量找出xml里面的数字;根据数组,批量生......
  • 使用jstl得加pom里的依赖
    <!--jstl--><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>taglibs</groupId><......
  • golang标准库 json
    序列化:将内存中对象存储下来,把它变成一个个字节,转为二进制数据反序列化:将文件的一个个字节恢复成内存中队形。从二进制数据中恢复字符序列化:jsonxml二进制序列化:proto......
  • 18.JSR303数据校验
    以新增品牌接口为例接口代码展示   添加校验注解前端送的json对应BrandEntity,比如我们需要品牌的名称不能为空:  NotBlank注解表示不允许为null为空为纯空......