介绍
node.js是一个开发平台,该平台使用的编程语言是JavaScript语言。node.js平台是基于Chrome V8 JavaScript引擎构建的。
应用场景:基于node.js可以开发控制台程序(命令行程序、CLI程序)、桌面应用程序(GUI)(借助node-webkit electron等框架实现)、web应用程序(网站)。
PS: 何为开发平台,有对应的编程语言、有语言运行时、有能实现特定功能的API(SDK:Software Development Kit)。
特点
- 事件驱动(当事件被触发时,执行传递过去的回调函数)
- 非阻塞I/O模型(当执行I/O操作时,不会阻塞线程)
- 单线程
- 拥有世界最大的开源库生态系统——npm
文件的写入 fs.writeFile()
fs.writeFile(file,data[,options],callback)
const fs = require('fs')
var msg = 'Hello World'
//此处的./相对路径,node命令所执行的目录下寻找此文件
fs.writeFile('./hello.txt',msg,'utf8',function(err){
if(err){
console.log('写入失败,具体错误为:'+err)
}else{
console.log('写入成功')
}
})
实现文件读取操作 fs.readFile()
fs.readFile(file[,options],callback)
const fs = require('fs')
fs.readFile('./hello.txt',function(err,data){
if(err){
throw err
}
//data参数的数据类型是一个Buffer对象,里面保存的是一个个字节
//将buffer对象转换为一个字符串,可以调用toString()方法,不传参数,默认编码也是utf8
console.log(data.toString('utf8'))
})
解决在文件读取中./相对路径的问题
__dirname:表示,当前正在执行的js文件所在目录
__filename:表示,当前正在执行的js文件的完整路径
let filename = __dirname + '\\' + 'a.txt'
路径拼接 path.join()
在windows 与 MacOS Linux中,路径斜杆的写法是不一样的,使用path.join拼接,自动匹配斜杆的写法。
const path = require('path')
let filename = path.join(__dirname,'a.txt')
创建一个简单的http服务程序
//加载http模块
var http = require('http')
//创建一个http服务对象
var server = http.createServer()
//监听用户的请求事件(request事件)
server.on('request',function(req,res){
//解决乱码的思路:服务器通过设置http响应报文头,告诉浏览器使用响应的编码来解析网页
res.setHeader('Content-Type','text/html;charset=urf-8')
res.write('Hello World')
//对于每一个请求,服务器必须结束响应,否则客户端(浏览器)会一直等待服务器响应结束
res.end()
})
//启动服务
server.listen(8080,function(){
console.log('server is running,please visit http://localhost:8080')
})
- request对象包含了用户请求报文中的所有内容,通过request对象可以获取用户提交过来的数据
- response对象用来向用户响应一些数据,当服务器要向客户端响应数据时必须使用response对象
- 有了request对象和response对象,就既可以获取用户提交的数据,也可以向用户响应数据
根据不同请求做出不同响应 request.url可以得到用户请求的路径
var http = require('http')
http.createServer(function(req,res){
if(req.url === '/' || req.url === '/index'){
//res.write('hello index')
//res.end() 以上两句话可以精简为
res.end('hello index')
}else if(req.url === '/login'){
res.end('hello login')
}else if(req.url === '/list'){
res.end('hello list')
}else{
res.end('404,not Found')
}
}).listen(8080,function(){
console.log('server is running,please visit http://localhost:8080')
})
请求不同类型的文件
假设所有的静态资源都放在与server.js同一目录下的public文件夹内。引入第三方插件mime,用来设置每次请求所返回的文件的类型。
//server.js
var http = require('http')
var fs = require('fs')
var path = require('path')
var mime = require('mime')
http.createServer(function(req,res){
var publicDir = path.join(__dirname,'public')
var filename = path.join(publicDir,req.url)
fs.readFile(filename,function(err,data){
if(err){
res.end('404')
}else{
res.setHeader('Content-Type',mime.getType(filename))
res.end(data)
}
})
}).listen(8080,function(){
console.log('server is running,please visit http://localhost:8080')
}
如此,即可请求任意文件,而无需使用if else逐一匹配。