nodejs尝试中遇到的错误
一、文件系统/模块 fs:
1、文件路径名与转义字符之间的转化:
(1)反斜杠 加 n:\n 就是换行符,\t 就是制表符,\\ 就是反斜杠 \ 等等……
这里就疏忽了这个问题。。。
2、文件系统的write与writeFile方法传参数区别,类似的还有read与readFile方法传参数的区别:
(1)使用文件系统fs中的write方法时,遇到报错:自己不认识其中的fd是什么东东,查了一下,发现是默认的一个参数取名
Uncaught: TypeError [ERR_INVALID_ARG_TYPE]: The "fd" argument must be of type number.
(2)查看正确的使用方法:
二、网络与服务器模块 http,server:
1、先引入http模块,再创建一个Server,接着监听某个端口,最后设置响应方法与函数;
例:
let h1 = require('http'); // 引入http模块
let s1 = h1.createServer(); //创建一个server对象
s1.listen(800, function(data) { // 设置监听端口号与回调函数
console.log('data is: ' + data);
});
// 绑定接收客户端请求的request事件
s1.on('request', function(req, resp) { // 这里进行正式的数据返回响应
resp.setHeader("content-type", "text/html;charset=utf-8");//设置响应头类型
resp.write("your name is who?jack?or peter?");
resp.end();
// 响应返回数据后记得结束一下,
// 否则客户端以为服务器端还有数据会返回,就一直等待;
});
(1)监听端口时,注意端口取值范围0~65535,而我们比较常听的了解的就是8080(Apache服务器),3306(MySQL的)等这样一些公司已占有的,不能取相同的端口号;
(2)设置响应方法,函数时,返回数据的相关操作一般写法有 res.write("…"); res.end();
(3)调用write方法的对象不是req,而是resp,负责响应数据的那个对象来使用write方法;
(2)浏览器中请求得到返回数据后,渲染到页面上出现乱码(特别是关于html结构的):
nodejs服务器端没有设置合适的响应头类型,一般是要设置为utf-8,
resp.setHeader(“content-type”, “text/html;charset=utf-8”);
① 联想与思考:看到这里,我想到了之前看过书上说现在的网页HTML文件的编码形式书写语法直接写成 <meta charset=“utf-8” />就行了,而不用像以前那样写成<meta http-equiv=“content-type” content=“text/html;charset=utf-8” /> 的做法了。
(3)语句的重复书写&变量重复声明:
① 引入http模块的语句要注意防止重复书写:
一是要注意声明不同变量来接收引入的模块,防止变量已存在造成重复声明变量,二是模块已经引入,可以使用接收了这个模块信息的变量来使用,多次使用(,防止浪费。。。);
报错提示:
Uncaught SyntaxError: Identifier 'h1' has already been declared
② 未关闭的服务器和端口号不要重复定义监听方法:
上一次开启的监听服务器对象server与端口号,如果没有关闭,再次在nodejs端重复书写这样的语句。会报错,
报错提示:
Listen method has been called more than once without closing.
③ 设置响应头信息 resp.setHeader(“content-type”, “text/html;charset=utf-8”);的语句在同一个监听方法中不要重复书写:之前在同一个http与server对象以及监听方法,处理方法中设置了相应的响应头类型,这里没必要再声明了(个人的理解);
报错提示:
Uncaught: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client