一. 什么是node.js
html, 骨架
css, 样式
js, 交互的行为
浏览器中的javascript由几部分组成
js核心语法
webapi(DOM操作, BOM操作, AJAX操作)
思考: 为什么javascript可以在浏览器中被执行
.因为有解析引擎
思考: 为什么说, javascript可以操作Dom和Bom
待执行的js代码调用webAPI, 交给解析引擎, (每个浏览器都内置了操作DOM和BOM的函数)
什么是js代码的运行环境
浏览器->v8引擎->内置的函数
node.js就是一个基于谷歌浏览器v8引擎的js代码的运行环境
二. 可以用node.js来做什么
注意, node.js不能直接调用浏览器的内置API,
那么node,js有, 可以做做什么呢
三. node.js中javascript的组成部分
有内置模块, 有第三方模块
node -V: 查看node.js的版本
node js文件的路径: 运行文件也就是执行代码
四. node.js中的三个内置模块
4.1 fs模块读写操作文件
fs.readFile()方法; 用来读取指定文件中的内容
fs.writeFile()方法: 用来向指定的文件中写入内容
要先导入这个模块,
const fs = require(‘fs’)
fs从哪里来, 安装node.js时, 安装的内置API, 引入就可以使用
三个参数: path必选, options可选, callback必选
文件的路径字符串
可选参数, 表示什么编码格式
必选, 文件读取完成之后, 通过回调函数拿到读取的结果
const fs = require(‘fs’)
fs.readFile(‘./file/12.txt’, ‘utf8’, function(err, dataStr) {
console.log(err)
console.log(‘--------’)
console.log(dataStr)
})
如果读取成功, err的值为null, dataStr的值就是文件内容
如果读取失败, err的值为错误对象, dataStr的值为undefined
const fs = require('fs')
fs.readFile('./file/testfile.txt','utf8', function(err, dataStr){
//console.log(err)
//console.log('--------')
//console.log(dataStr)
if(err){
console.log("file readed fail")
}else{
console.log(dataStr)
let StrArr = dataStr.split(" ")
let newStrArr = []
StrArr.forEach(item=>{
newStrArr.push(item.replace("=",":"))
})
let newStr = newStrArr.join("\r\n")
fs.writeFile('./file/12.txt',newStr, function(err){
if(err){
console.log("file writeed fail")
}else{
//console.log("文件写入成功")//是乱码
console.log("file writed success")
}
})
}
})
注意
这里有一个fs模块的动态拼接问题,
由示例可知,不论是写入文件还是读取文件,都是使用的./
获取当前路径, 如果这个当前路径不是当前的node命令执行的路径, 很显然fs对象是不能正常工作的.
解决方法就是提供一个完整路径.
但是移植性非常差
const fs = require('fs')
fs.readFile('C:\\Users\\lyd\\Documents\\lea\\file\\testfile.txt','utf8', function(err, dataStr){
//console.log(err)
//console.log('--------')
//console.log(dataStr)
if(err){
console.log("file readed fail")
}else{
console.log(dataStr)
let StrArr = dataStr.split(" ")
let newStrArr = []
StrArr.forEach(item=>{
newStrArr.push(item.replace("=",":"))
})
let newStr = newStrArr.join("\r\n")
fs.writeFile('C:\\Users\\lyd\\Documents\\lea\\file\\12.txt',newStr, function(err){
if(err){
console.log("file writeed fail")
}else{
//console.log("文件写入成功")//是乱码
console.log("file writed success")
}
})
}
})
node提供了一个叫做__dirname
时刻监听node命令的执行文件的所在目录
const fs = require('fs')
fs.readFile(__dirname+'/file/testfile.txt','utf8', function(err, dataStr){
//console.log(err)
//console.log('--------')
//console.log(dataStr)
if(err){
console.log("file readed fail")
}else{
console.log(dataStr)
let StrArr = dataStr.split(" ")
let newStrArr = []
StrArr.forEach(item=>{
newStrArr.push(item.replace("=",":"))
})
let newStr = newStrArr.join("\r\n")
fs.writeFile(__dirname+'/file/12.txt',newStr, function(err){
if(err){
console.log("file writeed fail")
}else{
//console.log("文件写入成功")//是乱码
console.log("file writed success")
}
})
}
})
4.2 使用path模块来处理路径
fs -> path
node提供的
有属性和方法
专门用来处理用户对路径的需求
path.join(‘多个’,‘路径’,‘片段’,‘拼接’,‘到’,‘一起’)
其实和拼接字符串一样的道理, 只不过会自动处理./
, 所以更推荐这种
path.basename(): 用来从路径字符串中, 将文件名解析出来.
导入
和fs模块类似
const path = require(‘path’)
path.join实例
../
会抵消前面的路径
const pathDemo = path.join(‘/a’, ‘/b/c’, ‘…/’, ‘./d’, ‘e’)
\a\b\d\e
const path = require('path')
const pathDemo = path.join('/a', '/b/c', '../', './d', 'e')
console.log(pathDemo)
//获取文件路径
//const filepath = __dirname+'/file/testfile.txt'
const filepath = path.join(__dirname,'./file/testfile.txt')
console.log(filepath)
//获取文件名全名
const fileFullName = path.basename(filepath)
console.log(fileFullName)
//获取文件名没有后缀
const filenamewithou = path.basename(filepath, '.txt')
console.log(filenamewithou)
4.3 使用http模块写一个基本的web服务器
http模块就是官方提供的, 用来创建web服务的模块
http.createServer方法
就能很方便的将一台普通的电脑变成一台服务器
导入
const http = require('http')
创建web服务器实例
const serve = http.createServer()
为服务器实例绑定request事件, 即可监听网络请求
//监听网络请求, 触发request事件, 调用处理函数
serve.on('request', (req, res) => {
console.log('welcome')
})
调用listen(端口号, cd回调方法)方法来启动web服务器
server.listen(80, () => {
console.log('serve is running at http://127.0.0.1')
})
req就是请求对象
req.url就是请求的路径
req.method就是请求的方式
const str = 'your req url is ‘+req.url+’, and your req method is '+req.method
console.log(str)
PS C:\Users\lyd\Documents\lea\webdemo> node .\webtest.js
serve is running at http://127.0.0.1
welcome
your req url is /, and your req method is GET
welcome
your req url is /, and your req method is POST
res是响应对象
res.end方法
向客户端发送指定的内容, 并结束这一次请求的处理过程
res.end(‘thank you’)
//设置响应头, 解决中文乱码的问题
res.setHeader(‘Content-Type’,‘text/html; charset=utf-8’)
于是我们可以根据url做各种判断, 最后返回各种各样的内容
将url请求路径映射为磁盘地址