源码地址: https://github.com/LBipanda/Node-basics.git
一、文件的写入和读取
文件的写入和读取
文件的写入
var fs = require("fs")
// 写文件
// 第一个参数:文件路径
// 第二个参数:文件内容
// 第三个参数:回调函数
fs.writeFile("../file/createdOne.md","大家好,给大家介绍一下,我是Node.js",function(err){
if(err){ //判断读取文件是否错误
console.log("文件写入失败")
}else{
console.log("文件写入成功")
}
})
文件的读取
var fs = require("fs")
// 读文件
// 第一个参数:要读取的文件路径
// 第二个参数:回调函数
// 成功 data 文件写入成功; err null;
// 失败 data 文件写入失败; err 错误对象
fs.readFile("../file/createdOne.md",function(err,data){
// console.log(data)// <Buffer e5 a4 a7 e5 ae b6 e6 88 91 e6 98 af 4e 6f 64 65 2e 6a 73>
// 文件中储存的都是二进制数据,为甚看到的不是 0 和 1 呢?因为自动把二进制转为十六进制了
// 我们可以用toString()方法把其转换为我们认识的字符
if(err){ //判断读取文件是否错误
console.log("读取文件失败")
return
}
console.log(data.toString())//大家好,给大家介绍一下,我是Node.js
})
Node 核心模块 os
// 用来获取机器信息的
var os = require("os")
// 用来操作路径的
var path = require("path")
// 获取当前机器的 CPU 信息
console.log(os.cpus())
// 获取当前机器的总内存大小
console.log(os.totalmem())
使用 Node 构建一个简单的服务器
1.在 Node 中专门提供了一个核心模块: http
2.http 这个模块的职责专门帮你编写服务器的
//第一步、加载 http 模块
var http = require("http")
//第二步、 使用 http.createServer() 方法创建一个 web 服务器
var server = http.createServer()
//第三步、 注册 request 请求事件
// 当客户端请求过来,就会自动触发服务器的 request 事件,然后执行第二参数:回调处理函数
// request 请求事件处理函数,需要接收两个参数(request,response)
// request:请求对象(请求对象可以用来获取客户端的一些请求信息,例如请求路径)
// response:响应对象(响应对象可以用来给客户端发送响应信息)
server.on("request",function(request,response){
console.log("收到客户端请求了,请求路径是"+request.url)
//response 有一个方法:write 可以用来给客户端发送响应数据
// write 可以使用多次,但是最后一定要使用 end 来结束响应,否则客户端会一直等待
//一般的话我们会使用 end 发送响应数据
response.write("hello")
response.write("node.js")
//告诉客户端,服务器响应结束了
// response.end()
// 这个简单的服务器的能力非常弱,无论什么请求,都只能响应 hello node.js
// 升级: 我希望当请求的路径不一样的时候,响应的结果也不一样
// 例如:/ /login(登陆) /product(产品)这几个页面的返回不同的响应数据
// 根据 url 响应不同的数据
// 响应内容只能是二进制数据或者二字符串
var url = request.url
if(url === "/"){
response.end("index pages")
}else if(url === "/login"){
response.end("login pages")
}else if(url === "/product"){
var goods = [
{
name: "苹果",
price: 1111
},
{
name: "梨子",
price: 2222
}
]
// 在服务器默认发送的数据,都是 utf8 编码内容,但是游览器不知道是 utf8 的内容
// 游览器会默认按章当前操作系统的编码去解析(中文操作系统默认是 gbk)
//有中文字符所以 游览器显示的是乱码,我们可以通过 Content-Type 告诉游览器相应的内容是什么类型
response.end(JSON.stringify(goods))//乱码
// text/plain 就是普通文本
// res.setHeader("Content-Type","text/plain;charset=utf-8")
// res.end("hello 世界") //正常显示
// 如果发送的是 html 格式的字符串,也要告诉游览器游览器响应的是 text/html 格式的内容
// res.setHeader("Content-Type","text/html;charset=utf-8")
// res.end("<h1>你好 Node</h1>") //正常显示
}else{
response.end("404 Not Fount")
}
})
// 第四步、绑定端口号,启动服务器
server.listen(3333, function(){
console.log('服务器启动成功了,可以通过 localhost:3333 进行访问')
})
http 本地服务器结合 fs 发送文件中的数据
// 2. Conyent-Type: 不同的资源对应的 Conyent-Type 是不一样的
// 图片不需要指定编码,一般只有四度数据才指定编码
var http = require("http")
var fs = require("fs")
var server = http.createServer()
server.on("request",function(req,res){
if(req.url == "/"){
fs.readFile("./resource/index.html",function(err,data){
if(err){
res.setHeader("Content-Type","text/plain;charset=utf-8")
res.end("文件读取失败,请稍后重试")
}else{
res.setHeader("Content-Type","text/html;charset=utf-8")
res.end(data)
}
})
}else if(req.url == "/img"){
// url: 用以资源定位符
fs.readFile("./resource/a.jpg",function(err,data){//读取的文件目录
if(err){
res.setHeader("Content-Type","text/plain;charset=utf-8")
res.end("文件读取失败,请稍后重试")
}else{
res.setHeader("Content-Type","image/jpeg")
res.end(data)
}
})
}
})
server.listen(4000,function(){
console.log("服务器启动成功了,可以进行访问了")
})
网友评论