global对象(相当于js的window)
在global对象中的所有内容,都可以不引用直接使用,如果global中没有,那么就需要通过require来引入之后才可以使用
global包括有:__dirname, __filename, exports, require()等
fs文件系统
读取: fs.readFile(path,encoding,callback)
path:要读取文件的路径
encoding:文件的字符编码格式,默认是null
callback:回调函数
var fs = require('fs')
fs.readFile('./data.txt', 'utf8', function(err, data){
if(err){
console.log('读取文件失败',err)
return
}
console.log(data)
})
写入:fs.writeFile(file,data,encoding,callback)
file:文件路径
data:要写入文件的内容
encoding:文件字符编码格式
callback:回调函数
如果文件存在,则会进行覆盖。不存在则创建文件(文件夹不能自己创建)
var fs = require('fs')
fs.writeFile('02data.txt', '我爱你', function(err){
if(err){
console.log('文件写入失败', err);
}
console.log('文件写入成功')
})
读写文件的同步方法:
fs.readFileSync
fs.writeFileSync
路径:path
相对路径:参照是当前执行命令的目录,而不是js文件所在的目录
如果想要将文件创建在执行命令的文件夹下,则直接写相对路径就行
如果想要将文件创建在和执行的js文件同一个文件夹下,则使用__dirname来拼接路径
__dirname:当前正在执行的js文件的文件夹路径
__filename:当前正在执行的js文件的路径
var fs = require('fs')
var nz = '去他的鸟命,我命由我不由天,是人是妖我说了才算'
// __dirname: 指的就是当前正在执行的js文件文件夹路径
console.log(__dirname) // E:\web\nodejs\01
// __filename: 指的就是当前正在执行的js文件的路径
console.log(__filename) // E:\web\nodejs\01\04-路径.js
fs.writeFile(__dirname + '/哪吒.txt', nz, function(err){
if(err){
console.log('写入文件失败', err)
}else{
console.log('写入成功')
}
})
path.join([...paths])
方法使用平台特定的分隔符作为定界符将所有给定的 path 片段连接在一起,然后规范化生成的路径。
var path = require('path')
fs.writeFile(path.join(__dirname, '/obj', 'js', 'a.txt'), 'path路径太爽了', function(err){
if(err){
console.log('文件写入失败',err)
}else{
console.log('文件写入成功')
}
})
// 文件a.tex路径为:E:\web\nodejs\01\obj\js\a.txt
http服务器
// 引入http模块
var http = require('http')
// 创建一个http服务器实例
var server = http.createServer()
// 给server注册事件 request
// request事件的触发时机:当服务器接收到浏览器的请求后,就会触发这个事件
server.on("request", function(req, res){
console.log("有请求来了")
// 设置请求头(处理中文乱码)
res.setHeader("content-type", "text/html;charset=utf-8")
// 在接收到浏览器的请求之后,必须对浏览器做出响应,否则浏览器就会一直处于挂起状态
// 通过response对象,提供的方法,就可以给浏览器响应数据了
res.write("响应的数据来啦")
// 在响应数据完毕之后,得通知浏览器,响应结束了!
res.end()
})
// server实例监听指定端口
server.listen(9999, function(){
console.log("http服务器连接成功")
})
request对象常用的属性
request.url 请求地址中的 路径和参数
request.headers 请求报文中的请求头信息,是一个对象
request.rawHeaders 请求报文中的请求头信息,是一个数组
req.httpVersion 浏览器发送http请求协议的版本号
req.method 获取请求方式
小案例:request.url路由Route (返回不同的内容)
request.url 可以获取到请求的 路径+参数
根据不同的url地址返回不同的内容其实就是路由Route
// 引入http模块
var http = require('http')
// 创建一个http服务器实例
var server = http.createServer()
// 给server注册事件 request
// request事件的触发时机:当服务器接收到浏览器的请求后,就会触发这个事件
server.on('request', function(request, response){
response.setHeader('content-type', 'text/html;charset=utf-8')
// 可以获取到请求的 路径+参数
// 如地址栏为:http://localhost:9999/index
// 输出为:/index
console.log(request.url)
switch (request.url){
case '/index':
response.end('首页')
break
case '/login':
response.end('登陆页')
break
default:
response.statusCode = '404'
response.statusMessage = 'NO FOUND'
response.end('你访问的页面不存在')
}
})
server.listen(9999, function(){
console.log('http://localhost:9999')
})
mime.getType 获取文件对应的Content-Type
下载: npm install mime
根据文件的路径或者文件的后缀名 获取文件相对应的Content-Type
var mime = require('mime')
// mime.getType 根据文件的路径 或者文件的后缀名 获取文件对应的Content-Type
// mime.getExtension("text/css")
console.log(mime.getType('abc/index.html')) // text/html
console.log(mime.getExtension('text/css')) // css
使用nodejs模拟phpstudy
目录结构
image.png
var http = require('http')
var path = require('path')
var fs = require('fs')
// 引入mine模块
var mime = require('mime')
var server = http.createServer()
server.on('request', function(req, res){
// ie访问出错解决:
// Content-Type: 就是服务器在返回数据给浏览器的时候,告诉浏览器返回的究竟是什么样的数据
// 只有返回了Content-Type之后,浏览器在接收到返回的数据,才知道要怎么处理
// 由于我们现在没有返回,所以IE在接收到css文件之后,不知道是个什么东西,所以css样式不生效!
// MIME类型:(解决ie访问出错问题)
// mime.getType 根据文件的路径 或者文件的后缀名 获取文件对应的Content-Type
// mime.getExtension("text/css")
// 如果用户请求的是 http://localhost:8888
// 那么req.url就是/ 我们也需要给浏览器返回 index.html
if(req.url == '/'){
req.url = '/index.html'
}
// req.url = req.url == '/' ? '/index.html' : req.url
// 请求头
res.setHeader('Content-Type', mime.getType(req.url))
fs.readFile(path.join(__dirname, 'public', req.url), function(err, data){
if(err){
res.statusCode = '404'
res.statusMessage = 'Not Found'
res.end('Not Found')
}else{
res.end(data)
}
})
})
server.listen(9999, function(err){
if(err){
}else{
console.log( 'http://localhost:9999' )
}
})