Node.js是基于Chrome V8引擎的JavaScript运行环境,无法调用DOM和BOM等浏览器内置API。
使用Node.js可以:
基于Express框架快速搭建web应用
基于Electron框架构建跨平台的桌面应用
基于restify框架构建API接口项目
操作数据库,创建实用的命令行工具
打开终端,输入命令
node js文件路径
快捷键:
↑:上一次执行的命令
tab:快速补全路径
esc:快速清空已经输入的命令
cls:清空终端
操作文件的模块
使用fs模块需要先导入模块
const fs = require('fs')
fs.readFile(path, [ options ], callback) //读取指定文件的内容,必写路径和回调函数,options是文件读取方式,选填
fs.writeFile(path,content,[options],callback) //向指定文件写入内容,必写文件路径,写入的内容,回调函数,选填写入格式,默认utf8
初试读取文件
//testReadFile.js
const fs = require('fs')
fs.readFile('./a.txt','utf8',function(err,dataStr){
console.log(err) //读取失败的信息,读取成功err为Null
console.log(dataStr) //读取成功文件的内容,读取失败为undefined
})
判断文件是否读取成功 ,根据err对象是否为Null判断文件读取的结果
//testReadFileSuccess.js
const fs = require('fs')
fs.readFile('./a.txt','utf8',function(err,result){
if(err){
return console.log(err.message)
}
console.log(result)
})
初试写入文件
//testWriteFile.js
const fs = require('fs')
// 这个方法是重写文件,不是追加
fs.writeFile('./a.txt','this is a.txt','utf8',function(err){
console.log(err) //写入失败的信息,写入成功err为null
})
判断文件是否写入成功
//testWriteFileSuccess.js
const fs = require('fs')
fs.writeFile('./a.txt','test write success',function(err){
if(err){
return console.log(err.message)
}
console.log('write success')
})
如果提供的操作路径是以./或者. ./开头的相对路径,代码运行时会执行node命令所处的目录,动态拼接出被操作的文件完整路径。
// testReadPath.js
const fs = require('fs')
fs.readFile('./a.txt','utf8',function(err,result){
if(err){
return console.log(err.message)
}
console.log(result)
})
// 终端,假设testReadPath.js在 C:\Users\Desktop\NodeTest\code目录下,运行命令
node testReadPath.js
// 读取成功,打印文件内容
// 切换目录为C:\Users\Desktop\NodeTest,运行命令
cd ../
node ./code/testReadPath.js
// 报错,找不到C:\Users\Desktop\NodeTest\a.txt
总结:node不识别终端命令里的路径
解决:使用绝对路径
__dirname 表示当前文件所处的目录
使用绝对路径读取文件
fs.readFile(__dirname+'/a.txt','utf8',function(err,result){
....
})
处理路径的模块
使用时先导入模块
const path = require('path')
path.join([...paths]) //将多个路径片段拼接成一个完整的字符出来,...paths路径片段的序列,返回一个string
path.basename(path,[ext]) //从路径字符串中将文件名解析出来,必填路径,ext为文件扩展名,选填,返回string,路径的最后一部分
path.extname(path) // 必填路径,返回文件的扩展名
拼接多个路径片段,为完整的路径字符串
const path = require('path')
const pathStr = path.join('/a','/b/c','/d','e')
console.log(pathStr) // \a\b\c\d\e
const pathStr2 = path.join(__dirname,'./a/test.txt')
consolr.log(pathStr2) // 当前路径\a\b\c\d\e
// 注意../会返回上一级路径
const pathStr3 = path.join('/a','/b/c','../','e')
console.log(pathStr3) // \a\b\c\e
获取文件名
const path = require('path')
const fileName = path.basename('./a/b/c/index.html','.html')
console.log(fileName) // index
获取文件的扩展名
const path = require('path')
const ext = path.extname('./a/b/c/index.html')
console.log(ext) // .html
创建web服务器的模块
创建web服务器前先导入模块
const http = require('http')
创建web服务器的基本步骤:
1、导入http模块
2、创建web服务器实例
3、为服务器实例绑定request事件,监听客户端请求
4、调用listen()方法,启动服务器实例
// 导入模块
const http = require('http')
// 创建实例
const server = http.createServer()
// 绑定request事件
server.on('request', (req,res)=> {
// 客户端请求服务器,执行这个函数
console.log('someone visit web server')
})
//启动服务器 listen(端口号,回调函数)
server.listen(80, ()=> {
console.log('http server running at http://127.0.0.1:80')
})
请求对象包含了客户端相关的数据和属性
req.url 客户端请求的url地址
req.method 客户端的method请求类型
打印客户端请求的url地址和请求类型
const http = require('http')
const server = http.createServer()
server.on('request',(req,res)=> {
console.log(`url is ${req.url} and method is ${req.method}`)
res.end('your url is ${req.url}')
})
server.listen(3000,()=>{
console.log('server running at http://127.0.0.1:3000')
})
res.end()方法向客户端发送内容,会出现中文乱码问题,需要设置响应头
res.setHeader('Content-Type','text/html:charset=utf-8')
server.on('request',(req,res)=> {
console.log(`url is ${req.url} and method is ${req.method}`)
res.setHeader('Content-Type','text/html:charset=utf-8')
res.end('你的请求url是: ${req.url}')
})
根据不同的url相应不同的html内容
const http = require('http')
const server = http.createServer()
server.on('request',(req,res)=>{
const url = req.url
let content='404 not found
'
if(url === '/' || url === '/index.html'){
content='首页
'
}else if(url === '/about.html'){
contene='关于
'
}
res.setHeader('Content-Type','text/html:charset=utf-8')
res.end(content)
})
server.listen(8080,()=>{
console.log('server running at http://127.0.0.1:8080')
})