nodejs基础(回调函数、模块、事件、文件读写、目录的创建与删除)
node官网:http://nodejs.cn/
今天想看看node的视频,对node进一步了解,
1、我们可以从官网下载node到自己的电脑上,今天了解到node的真正概念,node时javascript在服务端的运行环境,虽然之前知道,但没有像今天一样这样的新体会,
javascript在服务端的运行环境??一般javascript是在浏览器运行的,浏览器就是javascript的一种运行环境,而node,可以让它在服务端运行,那么node环境中,有许多api,比如浏览器环境的全局对象是window,但在node环境中,全局对象是global
2、我现在用vscode来练习使用node,创建一个文件夹,用vscode打开,在这个目录下创建app.js,然后写上一些js代码,在控制台输入 node app或则node app.js 里面的js代码就会运行了
3、在node环境中 __dirname 代表的是当前目录(node中的一个全局变量) console.log出来看一下,会知道,它显示的是app.js所在的文件在电脑上的绝对路径
4、__filename :是当前文件的路径(c/xx/hello-nodejs/app.js)
5、回调函数的使用
function callFunction(fun){//回调函数的使用
fun();
} var sayBye=function(){
console.log("bye");
} callFunction(sayBye);
给回调函数传参
function callFunction(fun,name){//回调函传参
fun(name);
} var sayBye=function(name){
console.log("bye"+name);
} callFunction(sayBye,"名字");
给回调函数传参的另一种常用写法
function callFunction(fun,name){
fun(name);
} callFunction(function(name){//调用
console.log("bye"+name);
},'名字');
6、require 以及 module.exports的使用(模块)
在node中,我们要分很多模块,那么怎样在一个模块中调用另一个模块呢?
加入我们要在app模块中调用count模块中的方法
count.js:
var counter = function(arr){
return "there are " + arr.length +"elements in the array";
} module.exports=counter;//暴露出来的内容
app.js:
var counter=require("./count");//引入count.js中暴露出来的内容,这里是一个函数 console.log(counter(["nodejs","vue","bootstrap"]));
然后运行node app 就会打印出想要的东西!!
如果想暴露多个东西呢?
count.js:
var counter = function(arr){
return "there are " + arr.length +"elements in the array";
} var adder = function(a,b){
return `the sum of the 2 number is ${a+b}`;
} var pi=3.14; module.exports.counter=counter;
module.exports.adder=adder;
module.exports.pi=pi;
app.js:
var stuff=require("./count"); console.log(stuff.counter(["nodejs","vue","bootstrap"]));
console.log(stuff.adder(2,3));
console.log(stuff.pi);
这样就可以暴露出多个东西
导出多种东西也有多种写法:
count.js:
module.exports={
counter:counter,
adder:adder,
pi:pi
}
还可以这样写
count.js:
module.exports={//es6语法
counter,
adder,
pi
}
还可以这样导出
count.js:
var adder = function(a,b){
return `the sum of the 2 number is ${a+b}`;
} var pi=3.14; module.exports={
counter:function(arr){
return "there are " + arr.length +"elements in the array";
},
adder,
pi
}
在app调用时,也有多种写法:(反正导出的是一个对象)
console.log(require("./count").pi);
7、事件 events
node中的事件,有点像jquery中的事件,node中的事件是自定义的,先引入events核心库,创建一个事件对象,绑定上事件名,和事件的回调函数,然后出发
var events=require('events');//events是一个核心库 var myEmitter = new events.EventEmitter();//创建一个事件对象 myEmitter.on('someEvent',function(message){//给事件对象绑定一个事件名,并且绑定上一个回调函数
console.log(message);
}) myEmitter.emit('someEvent','the event was emitted');//触发事件
下面来看一个应用实例:
var events=require('events');//events是一个核心库
var util=require('util');//引入工具库 (也是一个核心库) var Person=function(name){//创建一个类
this.name=name;
} util.inherits(Person,events.EventEmitter);//让Person 继承这个类 var xiaoming=new Person('xiaoming');//创建3个Person 实例
var lili=new Person('lili');
var lucy=new Person('lucy'); var personArr=[xiaoming,lili,lucy];//创建一个数组,把三个实例放进去 personArr.forEach(function(person){//给每个实例 绑定一个speak事件
person.on('speak',function(message){
console.log(person.name+'said:'+message);
})
}); xiaoming.emit('speak','Hi');//触发各自的事件
lili.emit('speak','i want a curry');
lucy.emit('speak','chi xi gua');
8、读写文件 fs
同步读写:
var fs = require('fs');//引入文件库(核心库) //读取文件内容(同步)
var readMe = fs.readFileSync("readMe.txt","utf8");//第一个参数是 文件路径 这里实在跟目录 直接写文件名就行 第二个参数是编码格式
//写入文件内容,没有此文件将会创建这样的文件(同步),如果writeMe.txt之前有内容,之前的内容则会被覆盖
fs.writeFileSync("writeMe.txt",readMe);
同步读写就是按照代码顺序执行,文件读写不完,下面的代码就不会执行;
下面面来看一个异步的读取:
var fs = require('fs');//引入文件库(核心库) //读取文件内容(异步)
var readMe = fs.readFile("readMe.txt","utf8",function(err,data){
fs.writeFile('writeMe.txt',data,function(){//异步写入
console.log("writeMe has finished");
})
});
console.log("finished");
当我们运行node app时,发现finished会先于读写的回调打印出来,这证明读写文件是异步的。注:node是多线程的,但node执行javascript时,是单线程的。
9、删除文件fs .unlink
var fs = require('fs');//引入文件库(核心库) fs.unlink('writeMe.txt',function(){//参数是文件路径和回调函数
console.log('delete writeMe.txt file');
})
删除文件是一个异步的过程,同样,加上sync就是同步的 (unlinkSync)
10、先创建一个文件,再删除(这里创建文件是用的写入文件的方法)
var fs = require('fs');//引入文件库(核心库) //这里是同步写入文件 其实我本意是 创建一个文件
fs.writeFileSync('stuff.txt','');//注意同步没有回调函数
// 删除刚刚创建的文件
fs.unlinkSync('stuff.txt');//注意同步没有回调函数
11、创建文件目录 fs.mkdirSync(对应的有异步方法)
var fs = require('fs');//引入文件库(核心库) fs.mkdirSync('stuff');//创建文件(这里是同步的,因为有Sync)
12、先创建一个文件目录,再删除(fs.rmdirSync)
var fs = require('fs');//引入文件库(核心库) fs.mkdirSync('stuff');//创建文件(这里是同步的,因为有Sync) fs.rmdirSync('stuff');
13、先创建一个目录,再在此目录中写入一个文件,(这里都采用同步的方法)
var fs = require('fs');//引入文件库(核心库) fs.mkdirSync("./stuff");
fs.writeFileSync("./stuff/aa.txt","");
14、先创建一个目录,再在目录里写一个文件,然后,删除该目录里的这个 文件,然后再删除这个目录(同步)
var fs = require('fs');//引入文件库(核心库) fs.mkdirSync("./stuff");
fs.writeFileSync("./stuff/aa.txt","");
fs.unlinkSync("./stuff/aa.txt");
fs.rmdirSync("./stuff");
15、将一个文件复制到新创建的目录中,这里都采用异步的
var fs = require('fs');//引入文件库(核心库) fs.mkdir("./stuff",function(){
fs.readFile("readMe.txt","utf8",function(err,data){
fs.writeFile("./stuff/writeMe.txt",data,function(){
console.log("write file success!");
})
})
})
nodejs基础(回调函数、模块、事件、文件读写、目录的创建与删除)的更多相关文章
- nodejs基础 -- 回调函数
Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都 ...
- java基础-回调函数(callback)
java基础-回调函数(callback) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数 ...
- linux文件与目录的创建
在Linux初期的学习中,是我们对基础命令的掌握,首先我们学习文件与目录的创建,分别有一些命令与选项,我们依次来看: 1:在Linux系统中,一切服务皆以文件的形式表现,脚本文件,服务配置文件,记事本 ...
- 文件操作工具类: 文件/目录的创建、删除、移动、复制、zip压缩与解压.
FileOperationUtils.java package com.xnl.utils; import java.io.BufferedInputStream; import java.io.Bu ...
- python自动化--语言基础四模块、文件读写、异常
模块1.什么是模块?可以理解为一个py文件其实就是一个模块.比如xiami.py就是一个模块,想引入使用就在代码里写import xiami即可2.模块首先从当前目录查询,如果没有再按path顺序逐一 ...
- python内置函数,lambda表达式,文件读写
Lambda表达式: lambda是个匿名函数,自动加return返回 a={ 6:2,8:0, 1:4,-5:6,99:11,4:22} print(sorted(a.items()))#按key排 ...
- python基础12 ---函数模块2
函数模块 一.sys函数模块详解 1.sys.argv[x] 功能:从程序外部接受参数,接收的参数个数可以是多个,在程序内部sys.argv吧这些外部参数转换成元组的形式,然后以索引x的方式在内部取出 ...
- python基础14 ---函数模块5(模块和包)
模块与包 一.模块 1.模块是怎么诞生的. 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护.为了编写可维护的代码,我们把很多函数分组,分别放到 不同的文 ...
- python基础11 ---函数模块1
函数模块 一.函数模块的作用(为什么要有函数模块) 1.函数模块可以减少代码量 2.函数模块方便阅读 3.函数模块维护性强二.函数模块的本质以及调用方法 1.函数模块的本质就是一个.py结尾的文件,该 ...
随机推荐
- Base64编码为什么会使数据量变大
现在工作中把视频转成base64发现数据量过大无法下载. 1.为什么base64编码会使数据量变大呢? Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码.它将需要编码的数据 ...
- (五)lucene之特定项搜索和查询表达式
需求:模糊搜索. 前提: 本例中使用lucene 5.3.0 package com.shyroke.lucene; import java.io.File; import java.io.File ...
- JDBC 复习4 批量执行SQL
1使用jdbc进行批量执行SQL在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. package dbe ...
- 内置函数----format
说明: 1. 函数功能将一个数值进行格式化显示. 2. 如果参数format_spec未提供,则和调用str(value)效果相同,转换成字符串格式化. >>> format(3.1 ...
- 使用element-ui中的el-upload组件时携带其他参数
解决方法:// template <el-upload action="/api/oss/file/add" :headers="headers" // ...
- CircularSlider半弧形滑动条
前言 这边文章主要 是写 一.半圆弧型滑块的设计 最近项目中需要用到半圆弧形滑块,其作用和UISlider差不多,用于拖动改变播放音乐的播放进度. 大概样子是这样的: 效果展示 特点如下: 滑动响应区 ...
- ASE19团队项目beta阶段Backend组 scrum2 记录
本次会议于12月5日,19:00在微软北京西二号楼sky garden召开,持续10分钟. 与会人员:Zhikai Chen, Lihao Ran, Xin Kang 请假人员:Hao Wang 每个 ...
- WeixinJSBridge目前还能够直接使用的功能(2019)
参考地址:http://mmlike.sinaapp.com/ 其余功能不是不能用了,而是有各种条件了. 以下列出的功能,均可直接使用,无需appid等任何东东,只要在手机微信网页环境中 发送邮件 W ...
- linux修改文件系统注册设备
- Linux脑洞——怎么知道我这个Linux是啥时候开的机?
生产环境上,Linux服务器肯定不能随便重启,到底啥时候开的机,这个问题真没啥讨论价值.但是自己在WMWare Workstation下装虚拟机不一样 who -b