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结尾的文件,该 ...
随机推荐
- sublime text 2 + Dev-C++/MinGW 组合配置更方便快捷的 C/C++ 编译环境
首先看一下配置后的效果: 1.直接在底部文本框中显示运行结果(不需要从键盘输入的时候使用): 2.在cmd中运行结果(需要从键盘输入的时候使用): 快捷键说明: 运行: 在底部文本栏显示结果:Ctrl ...
- 为什么用JS取不到cookie的值?解决方法如下!
注意:cookie是基于域名来储存的.要放到测试服务器上或者本地localhost服务器上才会生效.cookie具有不同域名下储存不可共享的特性.单纯的本地一个html页面打开是无效的. 明明在浏览中 ...
- (八)装配Bean(2)
二.在Java类中进行显式的装配 显式配置有两种: 1. 一种是在java(本文讲解) 2. 另一种是xml配置文件(第一章有讲) 案例一: 使用java显式装配+@autowired自动装配的方 ...
- [JZOJ5465]道路重建--边双缩点+树的直径
题目链接 lueluelue 分析 这鬼题卡了我10发提交,之前做过一道类似的题目:https://rye-catcher.github.io/2018/07/09/luogu%E9%A2%98%E8 ...
- Linux MySQL 常见无法启动或启动异常的解决方案
Linux MySQL 常见无法启动或启动异常的解决方案 在 Linux 上自建 MySQL 服务器,经常遇到各种无法启动或启动后异常的问题,本文列举一些常见问题的解决办法. 注意:以下错误日志提示, ...
- 【轻松一刻】Java制作字符动画
前言 今晚闲来无事,整理了一下电脑中尘封已久的旧代码,看着那些年自己写过的代码,踩过的坑,顿时老泪纵横.正当在感叹之际,突然发现在“马克思”文件夹下出现了一个好玩的项目,那就是N年前刚学Java时写的 ...
- meta标签常见浏览器设置
一.如何让双核浏览器默认选择 WebKit 内核渲染自己开发的网页 我们可以使用标签来指定适合自己网站的渲染内核名称,当双核浏览器访问本网页时,就会根据我们的指示,选择我们指定的渲染内核来处理网页.若 ...
- 补充:Python安装
需要安装Python2.7.Numpy和Matplotlib.由于Python不支持向下兼容,因此在Python3.×下你一定能正常运行Python2.×的代码.上述模块最简单的安装方法就是用软件包安 ...
- zabbix-通过自动注册自动添加主机
自动注册和自动发现可以实现一样的效果,就是自动添加符合条件的主机到监控,那跟自动发现有什么区别? 其实自动发现是由弊端的,上文也说到了,zabbix server是主动去扫描网段,寻找agent的,试 ...
- Win10删除或是不显示快速访问中最近使用文件记录
Win10删除或不显示快速访问中最近使用文件记录 安装win10系统后,在文件资源管理器的快速访问将默认记录使用和访问了电脑的一些文件,但是有些最近访问文件的历史纪录,并不想让别人看到,所以就想快速删 ...