一.在了解node.js之前,先谈谈前端与后端的解
前端:做静态资源(官方解释:创建Web页面或app等前端界面呈现给用户的过程,通过HTML,CSS及JavaScript以及衍生出来的各种技术、框架、解决方案,来实现互联网产品的用户界面交互);
后端:操控资源(官方解释:网站上的一些注册登录和一些弹窗,这些都是后端的逻辑,常用的后端语言有php,jsp等,后端的数据库也包含myspl等,都是对后端进行存储数据。)
二.为什么学习node.js
node.js的特点:
(1).它是一个JavaScript运行环境
(2).依赖于Chrome V8引擎进行代码解释
(3).时间驱动
(4).非阻塞IO
(5).轻量;可伸缩,适于实时数据交互运动
(6).单进程,单线程
(7).没有兼容性的问题
(补充:1.什么是JavaScript:是一个脚本语言,嵌入在HTML中
2.JavaScript可以做什么:操作dom;表单的效验
3.JavaScript和浏览器的关系:浏览器解析JavaScript =》机器码(依靠浏览器的内核)
···最后一点注意:node.js只是一门技术,并不是一种新的语言
)
三.操作node的方式与一些命令指令符
(1).window+r+(输入cmd):进入面板
(2).cls:面板中输入cls(清屏);
(3).cd+(空格)+(文件夹路径):进入指定文件夹内
(4).直接输入node;进入repl,进入交互运行环境
(5).连续按两下cril + c退出repl环境
(补充).node文件中没有window这个环境
四.node的方法
(1).断言——assert(断言即我们相信程序某个特定点布尔表达式为真)
const assert = require('assert');
assert(true, console.log('***打印出信息了'));
(2).测试——console
console.time("test") consol.log("hello world") console.timeEnd("test") (用来测试输出hello world的时间)
(3).模块化(导入)
1——导入的两种方式:
espords.add=add(espords全局的对象)
let fs=require("fs")=>导入模块
2——Moudle.exports(曝光)
module.exports = {
add : add
}
3——process(全局对象)
// process 全局的对象
console.log(process.version)
console.log(process.stdout)
(4).对文件或者文件夹的读写功能(使用文件系统,新引入文件系统的模块)
let urlObj = url.parse(req.url,true)
let query = urlObj.query;
let pathname = urlObj.pathname;
let query_uname = query.uname;
读文件(readFile)
let urlObj = url.parse(req.url,true)
let query = urlObj.query;
let pathname = urlObj.pathname;
let query_uname = query.uname;
fs.readFile("path",callback)=>异步的
fs.readFile(“path”)=>同步的
实例:
fs.readFile("01.html",(err,data)=>{
if(err){
throw err;
return;
}//如果有错误 ,hui抛出err
renponse.end(data);//如果没有错误,err为null,则输出data值
})
(5).fs.access()——判断文件或者文件夹是否存在,如果不存在,err值就有值,如果存在,err就没有值
s.access('./01.html',(err) => {
// console.log(err);
if(err){
throw err;
}
fs.readFile('./01.html','utf8',(err,data) => {
console.log(data);
})
})
(6).什么是IO(输入和输出)=>数据的传输
1——异步的IO处理=>node属于单线程(用异步代替了多线程)
并发:一段时间内有几个程序处于启动运行到运行完毕之间
补充:(
进程:代码执行的一个环境;
线程:单线程=>node属于单线程(用异步取代了多线程);
多线程:调度很难)
2——异步的IO操作和异步的非IO操作;
异步的IO操作:
(1):文件系统
(2):网络操作
异步的非IO操作:
(1):settimeout
(2):setinterval
(7).模块fs下的六大方法
1——写文件
异步
异步的写法
// fs.writeFile(path,content,'utf8',(err)=>{
if(err){
throw err;
return;
}
// })
同步
// var err = fs.writeFileSync('./04.json',"lasdjsdfsdfsdfsdfdsfsdfflksjdflksjdlkjsdlfjkds","utf8");
// console.log(err)
2——追加内容
// fs.appendFile('./05.json',"这个是追加的内容",'utf8',(err) => {
// console.log(err)
// })
3——创建文件夹
// fs.mkdir('./abc',(err) => {
// })
4——列出所有文件或者文件并以数组的形式展开
// fs.readdir('./',(err,files) => {
// console.log(files)
// })
5——判断问价或者文件夹是否存在
fs.stat('./04.json',(err,stats) => {
if(stats.isDirectory()){
console.log('是文件夹')
}else{
console.log('不是文件夹')
}
})
(8).内置模块(path)
path.basename =>获取当前文件的文件名。
console.log(path.basename("C:\\Users\\Administrator\\Desktop\\node\\02\\indasdfsdfex.html\\index.html"));
path.dirname=>获取文件名详细路径
console.log(path.dirname("C:\\Users\\Administrator\\Desktop\\node\\02\\abc\\index.html"))
path.extname=>获取文件响应的后缀名(不同的文件请求头不一样)
console.log(path.extname('C:\\Users\\Administrator\\Desktop\\node\\02\\indasdfsdfex.html\\index.html.css.png'))
path.join(‘/a’,'/b','/c')=路径拼接
console.log(path.join('/a',"/b","/c"))
(9)网络编程(网络,上网,新闻,游戏)=>数据的交互
bs => browser server (浏览器,服务器)
cs=> client server (客户端 服务器);
(两台计算机可以发生网络数据交互,完成通信)
(服务器=>一个性能比较好的电脑)
服务器:web服务器的一种应用服务器;提供web,对web应用程序提供运行环境(Apache;tomcat;iis;nigx)=>(把前台和后台所有代码放在指定位置,然后进行运行,node不需要服务器)
1——监听request事件的时候,都会触发request事件(触发完成就回去执行一个callback)
server.on('request',function(request,response){ response.writeHead(200,{'content-type':"text/html;charset=utf8"}); response.write('<h1>你好</h1>'); response.end('world') console.log(request.httpVersion); console.log(request.method) console.log(request.url) }) server.listen(3000)