node.js入门;

node .js不是一门新的语言,它是一个平台,提供了javascript运行环境。在node中,javascript的DOM,BOM不能在用,其他的正常,可以通过javascript操作文件,和连接数据库。

前端模块化怎么来的

前端本来是没有模块化概念的,以前也没有前端这个岗位,那个时候简单的交互都是通过后端将代码发送到前端实现的。随着ajax的出现,javascript发挥了更大的作用,随之而来的就是页面交互变得复杂,前端代码大量增长,为了提高代码的复用率,函数大量使用。而函数就可以看成是前端模块化雏形。函数多了也可能重名,且调用复杂,就把众多函数写成一个对象。但这样也有缺点,调用对象的时候有可能将对象的属性修改,内部状态可以被外部修改。为了无法访问内部状态使用立即执行函数,执行完之后,立马销毁。销毁了,有些需要保存函数状态值的地方,就不能使用了。使用闭包既可以不污染变量又可以,又可以重复使用,可闭包也有缺点呀,变量所在内存无法被销毁,使用的越多,对性能的影响越大。模块化处理分为两种方式,一种是在浏览器运行的时候加载模块,是在线编译的相当于在浏览器上加了一个解释器( seajs / requirejs )。另外一种是预编译模式,在使用之前就将模块化内容转换为浏览器可执行的代码(browserify / webpack)。预编译模式更加可靠。

练习

在Es6中如何导出模块
import命令具有提升效果,会提升到整个作用域的最前面
使用 export导出模块,

 export class Compute{
	 constructor(a,b){
		 this.a=a;
		 this.b=b;
	 }
	 add(){
		 return this.a+this.b;
	 }
	 subtract(){
		 return this.a-this.b;
	 }
     mulpitly(){
		 return this.a*this.b;
	 }	  
	 divide(){
		 return this.a/this.b;
	 }
}

使用 import {…} from 模块地址/名 导出模块

import {Compute} from "./a.js";
import {b} from "./c.js";
var cantent=new Compute(10,5);
console.log(cantent);

默认导出 export default … 默认导出 不需要变量接受自己定义;

export default '你好';

导入改名

import {Compute as con} from "./a.js";

导出改名

let name_1='张三';
let name_2='李四';
export {name_1 as z,name_2 as li};

补充下面代码

//moudle5.js
export  class Point {
      constructor(x, y) {
          this.x = x;
          this.y = y;
      }
      toString() {
          return this.x + '\t' + this.y;
      }
  }
//index.js
let p=new Point(2,3);
console.log(p.toString());

补充

//moudle5.js
export  class Point {
      constructor(x, y) {
          this.x = x;
          this.y = y;
      }
      toString() {
          return this.x + '\t' + this.y;
      }
  }
//index.js
import {Point} from './moudles.js'
let p=new Point(2,3);
console.log(p.toString());

在下滑线处补充完下面moudle6.js模块的程序

//moudle6.js
_______function (x, y) {
    return x * y;
}
//index.js
import myMethod  from './moudle6'
console.log(myMethod(2,2))

改动

//moudle6.js
export function (x, y) {
    return x * y;
}
//index.js
import myMethod  from './moudle6'
console.log(myMethod(2,2))

下面程序打印的结果为?

//lib.js文件
export let foo = ()=> {console.log("fnFoo") ;return "foo"},bar = "stringBar";
		
//main.js文件
import {foo, bar} from "./lib";
console.log(foo());
console.log(bar);

结果

'fnFoo'
'stringBar'

add.js

export let  add=(a, b) => {
    if (typeof a == 'number' && typeof b == 'number') {
        return a + b
    } else {
        return 0
    }
}
//main.js文件
import {add} from "./add";
console.log(add(10,'a'));

0

下面程序执行结果为?

// a.js
import {bar} from './b';
console.log('a.js');
console.log(bar);
export let foo = 'foo';

// b.js
import {foo} from './a';
console.log('b.js');
console.log(foo);
export let bar = 'bar';

执行node a.js运行结果为

'b.js'
'foo'
'a.js'
'bar'

完善格式化日期模块 年-月-日 时:分:秒

let times=(data)=>{
     var y=data.getFullYear();
     var m=data.getMonth()+1;
	 var d=data.getDate();
	 var h=data.getHours();
	 var min=data.getMinutes();
	 var s=data.getSeconds();
	 var temp=`当前时间${y}${m}${d}${h}${min}${s}`;
	 return temp;
}
let time_2=()=>{
	let data=new Date();
	var y=data.getFullYear();
	var m=data.getMonth()+1;
	var d=data.getDate();
	var h=data.getHours();
	var min=data.getMinutes();
	var s=data.getSeconds();
	var temp=`当前时间${y}${m}${d}${h}${min}${s}`;
	return temp;
}
export {
	times,
	time_2
}

封装一个计算器模块 加减乘除


 export class Compute{
	 constructor(a,b){
		 this.a=Number(a);
		 this.b=Number(b);
	 }
	 judge(){
		 if(typeof this.a!='number'){
		 	 return '请输入数字';
		 }
		 else{
			 return '输入的是数字' ;
		 }
	 }
	 add(){
		 this.judge();
		 return this.a+this.b;
	 }
	 subtract(){
		 this.judge();
		 return this.a-this.b;
	 }
     mulpitly(){
		 this.judge();
		 return this.a*this.b;
	 }	  
	 divide(){
		 this.judge();
		 return this.a/this.b;
	 }
}

使用

import {Compute as con} from "./a.js";
// import {b} from "./c.js";
// import {z,li} from "./ss.js";
// // import {times,time_2} from './times.js';
// console.log(b);
// console.log(z,li);
var cantent=new con(3,"8");
console.log(cantent.judge());
console.log(cantent.add());

效果

在这里插入图片描述

未续待完。

node .js

不导模块的api

运行在node上,global相当于浏览器上的window,

global.console.log(111);

__dirname 文件所在目录。
__finename 文件所在地址

console.log('dirname:',__dirname)
console.log('filename:',__filename);

process.arch 获得操作系统信息
process.argv 得到数组,第一个值代表node安装地址,第二个值,当前文件夹地址。

global.console.log(process.argv);
global.console.log(process.arch);

path模块

导入模块

const path=require('path');

path.extname()得到的是文件的后缀名,如果是目录则没有后缀名。

console.log(path.extname('./a.js'));

当前文件夹,当前文件所在目录

console.log(path.dirname(__dirname));
console.log(path.dirname(__filename));

解析地址把字符串转化为对象

global.console.log(path.parse(__filename));

解析地址把对象转化为字符串

global.console.log(path.format(temp));

absolute判断是否绝对路径,服务器环境下,目录最前面有/的就速绝对路径
返回布尔值

global.console.log(path.isAbsolute('./src'));

path.join路径拼接
‘…’ 是返回上级

global.console.log(path.join(__dirname,'my','txt.txt'));
global.console.log(path.join(__dirname,'my','txt.txt','..'));
global.console.log(path.join('my','text/text','js.js'));
global.console.log(path.join('my','tex/rexc','wadfaf','dawd'));

相对路径找地址,从第一个找到第二个

//path.relative(form,to);
global.console.log(path.relative('D:\\作业\\20210420\\practice\\src','D:\\作业\\20210420\\practice\\dir'));

路径解析

global.console log(path.normalize('d:\\\\20210420\\practice\\src'));

path.posix 包含了path常用方法,输出可以得到

global.console.log(path.posix);

fs

导入 fs 模块

const fs=require('fs');

创建文件夹
fs.mkdir(文件名/地址,回调函数)

 fs.mkdir('w',(err)=>{
 	if(err){console.log('文件')}
 	console.log('创建成功');
});

删除文件夹
fs.rmdir(文件名/地址,回调函数)

fs.mkdir('w',(err)=>{
    if(err) throw err;
    console.log('文件已移除');
    });

读取文件目录
fs.readdir(文件地址,回调函数)

fs.readdir('src',(err,files)=>{
     if(err) throw err;
     console.log(files);
     });

检测文件状态
fs.stat(文件地址/名,回调函数)
返回布尔值

fs.stat('src',(err,stats)=>{
   global.console.log(stats.isFile)检测是否是文件
   global.console.log(stats.Directory)判断是文件还是文件夹
   });

读取当前目录,判断当前目录下每一个文件的状态。

fs.readdir(__dirname,(err,files)=>{
	if(err) throw err;
	console.log(files)
	files.forEach((item,index)=>{
		fs.stat(path.join(__dirname,item),(err,stats)=>{

			if(stats.isDirectory()){
				console.log(item+'是一个目录')
			}else{
				console.log(item+'是一个文件夹')
			}
		})
	})
})

写文件 创建一个新的文件

fs.writeFile('文件名','数据',(err)=>{
    if(err) throw err;
})

删除文件

fs.unlink('文件名',(err)=>{
    if(err) throw err;
})

读文件

fs.readFile('文件名',(err,data)=>{
    if(err) throw err;
    global.console.log(data.toString());
})

http

http模块需要引入

const http=require('http');

创建服务器

let server=http.createServer((req,res)=>{
})
//端口号
server.listen('8989')

req是客户端传回来的数据
res是传给客户端的数据

//传给客户端数据
res.write('111')
res.end('word');

res.end()传送数据之后会结束响应,结束响应之后后面的都不执行

需要声明编码方式避免乱码

	res.writeHead(200,{'Content-Type':'text/plain;charset=utf-8'});

req.url代表的是用户输入的路由/路径 除了ip和端口号以外的地址

req.url

favicon.ico自动请求 favicon.ico暂时不需要可以不用处理

if(req.url=='/favicon.ico') return;

a.startsWith(‘b’) 检测b是否以a字符串开头,返回布尔值
可以用来检测输入的路径是否符合要求

if(req.url.startsWith('/html')){
    fs.readFile(path.join(__dirname,req.url),(err,data)=>{
           if(err) throw err;
           res.end(data);
    })
}

post请求是一段一段发送的
req.on(‘data’,(回调函数))接收数据事件
回调函数的参数是传过来的数据

req.on('data',(chunk)=>{
    global.console.log(chunk);
})

req.on(‘end’,()=>{});数据接收完事件

req.on('end' ()=>{
   global.console.log('数据接收完毕');
})

url

引入url模块

const url=require('url');

url.parse() 解析地址栏拼接的信息,可以把地址字符串转换为对象,前台通过 get请求方式需要这种解析

url.parse(req.url,true)

通过键值对调用

let password=url.parse(req.url,true).query.password;
let name=url.parse(req.url,true).query.name;

将接收到的数据在返回到前台

res.end(`用户名${name}<br>密码${password}`

未续待完;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值