nodojs学习记录

node.js

  1. CLI 和 REPL
  2. __dirname当前文件夹目录

node执行顺序:同步(宏(console,setTimeout(fn,0))>微(promis-破迷思))>异步
注意setTimeout是宏任务但是里面的fn是异步

1、CLI (命令行,例如:cmd)和 REPL (Read Eval Prin Loop)读取、执行、输出、再次读新的

/*
	__dirname:当前文件(模块)所在目录
	__filename:当前文件(模块)的文件名称(包含文件绝对路径)
模块化:
	导出:exports 对象
	导入:require方法
			require(模块id/路径)
		返回被导入模块的 exports 对象

//REPL-常用的命令 :
//.break(退出编辑)  .clear(退出编辑) .exit(退出软件) .help(查看有什么命令) .save  文件名.js(执行的代码保存到文件) .load 文件名.js(加载一个js文件进入) .editor() 
*/

2、 node.js基础模块

//dirname查看文件地址
//通过require函数导入、exports对象导出    module.exports
//es6导出对象export    、 导入import   import   {xxx} from ‘文件路径’
//node.js内置模块:
//Event、process、buffer、fileSystem
//srteam

FileSystem

//FileSystem  fs
//CURD:
//它代表创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)操作。

// const fs = require('fs');//导入fs模块

// write

// 写入数据到文件
// fs.writeFile(file, data[, options], callback)

// input/output => i/o 操作 => 流 二进制 => buffer
// 数据(字符串,音频,视频,二进制) => buffer => stream
// 如果文件不存在,则创建
// 如果目录不存在,创建文件就会失败
// First Error : node中一种约定,如果一个回调可能有错误发生,那么约定回调函数的第一个参数专门用来提供错误对象。
// fs.writeFile('./1.txt', 'Miaov', (err) => {
//     // console.log(err);
//     // console.log('文件写入成功');

//     if (err) {
//         console.log('写入失败');
//     } else {
//         console.log('写入成功');
//     }
// });

// let res = fs.writeFileSync('G:/aaa/1.txt', 'Miaov');
// console.log(res);

// try {
//     // fs.writeFileSync('G:/aaa/1.txt', 'Miaov');
//     fs.writeFileSync('./1.txt', 'Miaov');
//     console.log('写入成功');
// } catch(e) {
//     console.log('写入失败');
// }

// 追加内容 
// fs.appendFileSync('./1.txt', '我是追加的内容');

//let content = fs.readFileSync('./1.txt');
//console.log(content);

// 获取文件其他信息
// let info = fs.statSync('./1.txt');
// console.log(info);
// console.log(info.isFile());

// 删除文件
// fs.unlinkSync('./1.txt');


// 文件夹

// 创建,不会进行递归创建
// fs.mkdirSync('./a/b/c');
// fs.mkdirSync('./a');

// 不能非空文件夹
// fs.rmdirSync('./a');

// let dirPath = './a';

// let files = fs.readdirSync(dirPath);
// // console.log(files);
// files.forEach( child => {
//     // 删除每一个子文件
//     fs.unlinkSync(dirPath + '/' + child);
// } );
// fs.rmdirSync(dirPath);

// rmdir('./a');

// // 递归删除文件夹
// function rmdir(dirPath) {
//     let files = fs.readdirSync(dirPath);
//     // console.log(files);
//     files.forEach( child => {

//         let childPath = dirPath + '/' + child;

//         // 当前child可能是文件也有可能是文件夹
//         if ( fs.statSync(childPath).isDirectory() ) {
//             //因为文件夹里面可能还会有子文件,所以也不能直接删除
//             //而是需要调用rmdir方法
//             // fs.rmdirSync();
//             rmdir(childPath);
//         } else {
//             // 删除每一个子文件
//             fs.unlinkSync(childPath);
//         }

//     } );
//     fs.rmdirSync(dirPath);
// }


//const fs = require('fs');

// 当文件发生改变的时候,触发回调
// fs.watchFile('./data.txt', e => {
//     // console.log('changed');

//     //e : 类似事件对象,保存当前变化的细节
//     console.log(e); 
// });

// 监听文件或目录
//fs.watch('./a', (eventType, filename) => {
    // eventType: change rename
    // filename: 当前发生改变的具体文件
    //console.log(eventType, filename);
});

-------------fs的小练习---------------------
/**
 * usage : node miaov app -i
 *  miaov : 我们的脚本文件
 *  app : 要生成的项目的名称
 *  -i : 参数,表示要同时产生index.html文件
 */

//const fs = require('fs');

// 获取用户要生成的项目名称,process
// console.log(process.argv);

//let appName = process.argv[2];

// 根据项目名称生成指定的目录
//let appRoot = __dirname + '/' + appName;

// console.log(appRoot);
//if ( fs.existsSync(appRoot) ) {
//     console.log('项目已经存在了,请勿重复创建!');
//     process.exit();
// }


// fs.mkdirSync( appRoot );
// fs.mkdirSync( appRoot + '/images' );
// fs.mkdirSync( appRoot + '/css' );
// fs.mkdirSync( appRoot + '/js' );

// 判断是否存在 -i 的选项
// if ( process.argv.includes('-i') ) {
//     fs.writeFileSync(appRoot + '/index.html', `
// <!DOCTYPE html>
// <html lang="en">
// <head>
//     <meta charset="UTF-8">
//     <meta name="viewport" content="width=device-width, initial-scale=1.0">
//     <meta http-equiv="X-UA-Compatible" content="ie=edge">
//     <title>App</title>
// </head>
// <body>
//     <h1>App</h1>
// </body>
// </html>
//     `);
// }

// console.log('项目创建完成!');

// process.stdout.cursorTo(0,0);
// process.stdout.write('() aaaa \r\n');
// process.stdout.write('(+) bbbb \r\n');
// process.stdout.write('() cccc \r\n');


buffer

/**
 * 位 -> 字节
 * 
 * ascii
 */


// process.stdin.on('data', (data) => {
//     console.log(data);
// });

// let bf1 = new Buffer(4);    //长度
// console.log(bf1);
// bf1[0] = 96; //二进制值

// bf1[0] = '中';

// bf1[4] = 96;
// console.log(bf1);

// let bf2 = new Buffer('miaov');
// let bf3 = new Buffer('妙味');

// console.log( bf2 );
// console.log( bf3 );
// console.log( '妙味'.length, bf3.length );


// let bf4 = new Buffer(10);

// bf4.fill(0x60, 2, 4);

// console.log(bf4);


let bf5 = Buffer.from('miaov');
let bf6 = Buffer.from('miaov');

// console.log(bf5, bf6);
// console.log(bf5 == bf6); //比较地址

// [1,2,3] == [1,2,3]

// console.log( bf5.equals(bf6) );

console.log( '妙味'.length );
console.log( Buffer.byteLength('妙味') );

// 基础概念,并不能够直接用于实现某个具体的效果,但是,我们
// 后面的一些效果的使用会经常涉及到这些基本原理的东西
// 后端(围绕  -  数据操作)

Event

const EventEmmiter = require('events');

// class Person extends EventEmmiter {

//     constructor(name) {

//         super();

//         this.name = name;
//         this.age = 0;

//         this.growup();
        
//     }

//     growup() {
//         setInterval(() => {
//             this.age++;

//             this.emit('growup');

//         }, 1000);
//     }

// }

// const p1 = new Person('eeee');

// // p1.setMaxListeners(1);

// p1.addListener('growup', function() {
//     console.log('长大了一岁');
// });
// // p1.prependListener('growup', function() {
// //     console.log('...');
// // });

// // console.log(p1.eventNames());

// // document.body.addEventListener('click')

// // document.body = new HTMLBodyElement();

process、

// argv : 用来获取当前运行node程序的相关参数

// console.log( process.argv );

// if (process.argv.includes('-v')) {
//     console.log('v1.0.0');
// }

// console.log( process.env );



let i = 0;
setInterval(() => {
    i++;
    console.log(i);

    if (i > 10) {
        process.exit();
    }
}, 1000);

bu


node执行顺序演示

/ console.log(1);

// setTimeout(function() {
//     console.log('定时任务1');
// }, 2000);
// setTimeout(function() {
//     console.log('定时任务2');
// }, 100);
// setTimeout(function() {
//     console.log('定时任务3');
// }, 100);

// console.log(2);
// for (var i=0; i<100000; i++) {

// }


/**
 * 
    console.log('script start');
    console.log('script end');
    new Promise(resolve => {
        console.log('promise start');
        resolve();
    })

    .then(function() {
        console.log('promise1');
    }).then(function() {
        console.log('promise2');
    });
 * 
 * 
 * event loop
 * setTimeout(function() {
    console.log('setTimeout');
}, 0);


同步代码
    (宏,微)
event loop

 */

// console.log('script start');

// setTimeout(function() {
    
//     new Promise((resolve)=>{}).then()

//     setTimeout(function() {
    
//     }, 0);

// }, 0);

// new Promise(resolve => {
//     console.log('promise start');
//     setTimeout(() => {
//         console.log('setTimeout2');
//         resolve();
//     }, 1000)
// }).then(function() {
//   console.log('promise1');
// }).then(function() {
//   console.log('promise2');
// });

// console.log('script end');


setTimeout(() => {

    // 宏任务
    new Promise(resolve => {
        console.log('promise')
        resolve();
    }).then(() => {
        //微任务
        console.log('then')
    });

    // 宏任务
    console.log(1);
    // 宏任务
    setTimeout(() => {

        console.log(1)

    }, 1000);

}, 1000);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值