一篇学会Node.js基础

前后端

客户端

	硬件:手机、平板、笔记本、台式机、电视机、智能手表、电器、售货机;
	软件:浏览器、QQ、微信、各种APP等;

服务器端

	硬件:服务器,就是电脑,配置非常好,设备;
	软件:Apache、Nginx、MySQL、IIS、Tomcat等,nodejs可以创建服务器。

前端(客户端界面开发):界面端 app web(页面html+css+js)
后端: PHP java node C C++等等

Web服务器: 提供网页访问的;
云服务器:可以理解为就是买了一个主机,远程控制云服务器(云电脑),把项目传过去并启动,这样就所有人都可以访问了

认识node.js

    nodejs只是一个基于V8引擎的js运行环境而已
    nodejs不是一个框架
    nodejs可以写服务器,也可以用于创建webpack包(vue)...
    node js文件路径:运行js文件

node.js的特点

模块

	1.node.js的开发是模块化开发的思想
	2.具有一些相同功能的代码,集成为一个模块 
	3.模块主要是由 node系统自带的模块  第三方模块  自定义模块组成
	4.大部分第三方模块都是由npm来管理  (npm是一个集成了当前世界上最多开源库的生态系统)

非阻塞I/O操作模型

	底层c/c++是多线程  为上层js提供编程接口

单线程

	上层js业务代码是单线程

三个模块

    nodejs主要是模块化开发:
    nodejs的模块主要分为三类:
    (1)系统模块:底层自带的,直接用 fs  path  http
    (2)第三方模块:别人写好的,我们直接拿过来用
    (3)自定义模块:自己写的

如何引入导出模块

	引入模块:模块必须引入require
	导出模块:module.exports

系统模块

fs模块(filesystem文件系统)

__dirname:当前文件所在目录的字符串表示

异步文件读取API:fs.readFile(‘file’,[options],callback(err,data))
  第一个参数为文件路径,
  第二个参数为option选项(对象)(encoding为编码形式),
  第三个参数为回调函数

	let fs = require('fs');			//引入fs模块
	console.log(1);
 	fs.readFile('./b.txt',{encoding: 'utf-8'},(err, data)=>{	
    	console.log(err, data);    //err参数:报错,没报错时值为null
	});							   //data参数:文件的内容
	console.log(2);
	//1  2  console.log(err, data);			所以这个API是异步的

异步文件写入API:fs.writeFile(‘file’,‘data’,[options],callback(err))
  第一个参数为文件路径,
  第二个参数为需要往文件里面写入的内容,
  第三个参数option选项(对象)(flag:”a”在文件内容的后面写入内容,不把之前的内容覆盖掉),
  第四个参数为回调函数

	let fs = require('fs');			//引入fs模块
	console.log(1);
	fs.writeFile('./a.txt',"需要往文件里面写入的内容",{flag: 'a'},(err)=>{
    	console.log(err);
	}); 
	console.log(2);
	//1  2  console.log(err);			所以这个API是异步的

异步创建目录API:fs.mkdir(‘file’,[options],callback(err))
  第一个参数为目录创建位置,
  第二个参数option选项(对象)(要创建多级目录,那么就必须把recursive设为true),
  第三个参数为回调函数

	let fs = require('fs');			//引入fs模块
	console.log(1);
	//fs.mkdir('./public',(err)=>{
    //console.log(err);
	//}); 
	//fs.mkdir('./public/js',(err)=>{
    //console.log(err);
	//});					//逐级创建不会报错,因为recursive默认值为false
	fs.mkdir('./upload/20220829',{recursive: true},(err)=>{ //创建多级目录也要设置recursive
    	console.log(err);
	});
	console.log(2);
	//1  2  console.log(err);			所以这个API是异步的

path模块

__dirname:当前文件所在目录的字符串表示
path.dirname(“路径”):表示获取路径中最后一段文件 或 文件夹所在的路径

	let path = require('path');				//导入path模块
	console.log(path.dirname(__dirname));			//F:code
	console.log(path.dirname('F:code/day1'));		//F:code

path.basename(“路径”):表示获取路径中最后一部分(最后一个文件名或者文件夹名)

	let path = require('path');
	console.log(path.basename(__dirname));			//day1
	console.log(path.basename('F:/code/day1'));		//day1

http模块

	let http = require('http');			//导入http模块,返回一个http对象
		// 创建一个服务器
	let server = http.createServer();	//这个对象里面有一个API:createServer()可以创建服务器,返回一个对象
		// 监听请求
	server.on('request',(req,res)=>{	//返回的这个对象里面有一个API:on()监听
    	res.end('响应给客户端的内容');	//response响应有一个API:end('字符串')响应给客户端的内容
		console.log(req.url);			//request请求      req.url 路由(请求的地址)默认为 '/'
	});
		// 设置端口号
	server.listen('8080',()=>{
    	console.log("服务器启动成功就会执行...");
	});

本地自己创建的服务器怎么访问?

	 http://127.0.0.1:端口号
	 http://localhost:端口号
 	 http://本地IP地址:端口号

例:如何根据不同的请求地址,响应的内容不一样

let http = require('http');
let fs = require('fs');				//引入fs模块

let server = http.createServer();
server.on('request',(req,res)=>{
    console.log(req.url);
    if(req.url == '/'){
        res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); 	//固定设置防止乱码
        fs.readFile('./index.html','utf-8',(err,data)=>{		//读取html文件
            res.end(data);										//data参数为文件的内容
        });
    }else if(req.url == '/login'){
        res.writeHead(200, { 'Content-Type': 'application/json' });		//固定设置防止乱码(Content-Type:内容形式)
        res.end(JSON.stringify({code: 1,data: '登录成功'}));
    }else if(req.url == '/register'){
        res.writeHead(200, { 'Content-Type': 'application/json' });
        res.end(JSON.stringify({code: 1,data: '注册成功'}));
    }else{
        res.end('111');
    }  
});
server.listen('8080',()=>{
    console.log("服务器启动成功就会执行...");
});

一个电脑上面可以启动多个服务器,通过端口号定位到访问的服务器

第三方模块

  npm :(node package manager)node包管理器
  npm init: 初始化项目,会产生一个配置文件:package.json
  npm install md5@版本号 --save: 下载md5模块(指定版本)
      简写=>npm i md5
  npm uninstall 模块:卸载某个模块
  npm update 模块: 更新某个模块

	var md5 = require('md5');			//导入md5模块
	console.log(md5('message'));		//API:md5()参数可以是字符串,Buffer,Array或者Unit8Array(8位无符号整数值的类型化数组)

自定义模块

自定义模块

	let mdl = {
    	name: 'Tom',
    	age: 22,
    	sayname(){
        	return this.name;
    }
	}
	// 导出
	module.exports = mdl;

使用

	// 导入
	let mymodule1 = require('./mymodule/mymodule1');	//用路径导入 ,而不是名字
	console.log(mymodule1);
	console.log(mymodule1.sayname());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值