初识Node.js
听说Node.js性能优越,在serverless大趋势下,突然有了想学学Node.js的心情,从哪开始比较好呢,本想百度,但还是想系列的了解下,于是就找到了Node.js官网教程
运行第一份代码
看到代码,就想运行看看是不是真的如此,正好之前本地安装过Node.js,还是有点小期待,这么少的代码就搭建了一个服务
`const http = require('http')
const hostname = '127.0.0.1'
const port = 3000
const server = http.createServer((req, res) => {
res.statusCode = 200
res.setHeader('Content-Type', 'text/plain')
res.end('你好世界\n')
})
server.listen(port, hostname, () => {
console.log(`服务器运行在 http://${hostname}:${port}/`)
})`
打开HBuilderX,新建main.js,复制粘贴代码、保存、运行
打开Chrome浏览器,输入:http://127.0.0.1:3000/
这是什么鬼啊,以为复制错了或漏了步骤,回官网仔细查看,发现确实没有漏步骤!
头痛的中文代码,乱象众生
刚开始以为是Chrome代码查看设置的问题,但发现并不是,最终确定应该是编码的问题,百度一下,果然有一堆人都遇到同样的问题,打开一些博文,拷贝、粘贴博文中的代码后,发现没有了乱码的问题。对于网页编程几乎零基础的我来说,虽然文章中都找到问题并解决了,但说的并不是很清楚,我还是希望能弄明白,原来的代码为什么有问题,如何最快解决。根本原因:文件头的字符集没有设置成utf-8。
解决这个问题有二种:
- setHeader
- writeHead
刚开始接触网页编程,对这二个方法的了解,基本上零啊,直接拷贝相应的部分的代码,发现居然不行,我的上帝,这是什么情况,一头懵
先看看一些人的解决方法:
其一:
var http = require('http');
http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<head><meta charset="utf-8"/></head>');
res.write('<h1>Node.js</h1>');
res.write('<b>亲爱的,你慢慢飞,小心前面带刺的玫瑰...</b>');
res.end('<p>Hello World</p>');
}).listen(3000);
console.log("HTTP server is listening at port 3000.");
这个代码能解决乱码问题,但代码不清晰,不易理解!不是说head没有指定utf-8字符集吗?为什么不在writeHead的时候指定呢?
其二:
var http = require('http');
var dt = require('./DateModule')
http.createServer(function(req, res){
res.writeHeader(200, {'Content-Type' : 'text/html;charset:utf-8'
});
res.write('<head><meta charset="utf-8"/></head>');
res.write("The date and time are currently: " + dt.myDateTime());
res.end('Hello world! 你好');
}).listen(8080);
这个writeHeader里已经指定utf-8字符集,后面还要write一次做什么呢,其作用是什么呢?
这些代码的博文链接就不贴出来了,不知道写博文的人是什么个情况
解决办法
回到这个问题上来,要解决这个问题,字符集就要设置正确,既然有二种方法,那究竟该如何设置呢,最后查找相关文档,找到了答案!
- 方法一:setHeader
这个方法是一次设置一个文件头属性 - 方法二:writeHead
这个是一次可以设置多个文件头属性
但这里只是对一个属性进行设置:Content-Type
直粘代码:
const server = http.createServer((req, res) => {
res.statusCode = 200
res.setHeader('Content-Type', 'text/html;charset=utf-8')
res.end('你好世界\n')
})
const server = http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'});
res.end('你好世界\n')
})
Node.js这个教程应该进行更新了,贴出来的代码居然运行不出来正确的代码,这把刚想学的小白挡在门口!!!