Node.js基础 toString啥时候不用

青松100 2020-06-23 07:39:57
在NODE.JS中,老师说:第1个代码中第7行,需要转为字符串data.toString(), 才能正确显示,否则就出现二进制的数字。
可是为什么在第2个代码中的第39行,res.end(data) 直接填data就行了,不需要转data.toString()

这是因为第2个代码是运行在浏览器的原因吗? 浏览器可以把二进制代码转为HTML?


第1个代码


var fs = require('fs')
fs.readFile('./data/hello.txt', function(error, data){
if (error){
console.log('读取错误');

}else {
console.log(data.toString());

}
})



第2个代码



var http = require('http')
var fs = require('fs')

var server = http.createServer()

server.on('request', function (req, res) {
// / index.html
var url = req.url

if (url === '/') {
// 肯定不这么干
// res.end('<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title></head><body><h1>首页</h1></body>/html>')
//补充:网页就是由字符串组成。

// 我们要发送的还是在文件中的内容
fs.readFile('./resource/index.html', function (err, data) {
if (err) {
res.setHeader('Content-Type', 'text/plain; charset=utf-8')
res.end('文件读取失败,请稍后重试!')
} else {
// data 默认是二进制数据,可以通过 .toString 转为咱们能识别的字符串
// res.end() 支持两种数据类型,一种是二进制,一种是字符串
res.setHeader('Content-Type', 'text/html; charset=utf-8')
res.end(data)
}
})
} else if (url === '/xiaoming') {
// url:统一资源定位符
// 一个 url 最终其实是要对应到一个资源的
fs.readFile('./resource/ab2.jpg', function (err, data) {
if (err) {
res.setHeader('Content-Type', 'text/plain; charset=utf-8')
res.end('文件读取失败,请稍后重试!')
} else {
// data 默认是二进制数据,可以通过 .toString 转为咱们能识别的字符串
// res.end() 支持两种数据类型,一种是二进制,一种是字符串
// 图片就不需要指定编码了,因为我们常说的编码一般指的是:字符编码
res.setHeader('Content-Type', 'image/jpeg')
res.end(data)
}
})
}
})

server.listen(3000, function () {
console.log('Server is running...')
})

...全文
2502 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
青松100 2020-06-24
  • 打赏
  • 举报
回复
引用 1 楼 文修 的回复:
这个是显示的问题,第一个是你需要在本地控制台看到可见的内容,而第二个则是你把数据原封不动的返回给客户端。
换而言之,控制台显示的二进制 客户端,会自动把二进制的数字,变为字符串?
文修 2020-06-24
  • 打赏
  • 举报
回复
这个是显示的问题,第一个是你需要在本地控制台看到可见的内容,而第二个则是你把数据原封不动的返回给客户端。

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧