node学习错题集
1.请求路径/favicon.ico
问题:node http.createServer()创建服务器,用户请求一次,但是服务器显示两次请求:一次为用户请求,一次请求路径为/favicon.ico ??
代码如下:
var http = require('http'); http.createServer(function(req,res){ console.log( req.url ); })
.listen(8080);
console.log("The server is on ...");
服务器显示如下:
原因:
第一条时URL地址为用户输入的客户端请求的目标URL地址,"/"代表用户的目标url地址为web应用程序的根目录.
第二个目标URL地址问浏览器为页面在收藏夹中的显示图标.默认为favicon.ico.而自动发出的请求的目标URL地址.
2.服务器端重定向
应用场景:
用户访问的资源不存在,需要重定向到404界面
HTTP协议状态码 302表示重定向
http.createServer(function(request,response){ response.writeHead(302, { 'Location': 'your/404/path.html' //add other headers here... });//重定向 response.end() });
3.注意 相对路径
开发过程中,前端后端的相对路径不同,需要清晰的分辨
后端(server.js):
var http = require('http'); http.createServer(function(request,response){ //var url = request.url;//此行错误
var url = "./"+request.url;//将路径转换成相对于server.js的路径
fs.readFile(url,function(err,data){}); }).listen(8080);
上述代码路径有问题,比如在浏览器中输入http://localhost:8080/html/index.html
request.url 的值为 "/html/index.html"
这时如果直接按照此路径去读取文件,肯定出错;
因为路径"/html/index.html" 中的第一个"/" 在服务器端(linux) 表示linux根路径
前端:
如果项目代码目录如下:
其中,server.js是创建服务器的脚本,当 node server.js开启服务器时,前端界面中的路径的根目录('/')就是server.js所在的目录
比如在浏览器中输入http://localhost:8080/fs/sf.html,由于不存在,所以重定向到 html/404.html,
以下是404.html中的代码:
<a href="/html/index.html">回到首页</a><!--绝对路径,根目录就是http://localhost:8080/;此根目录对应着server.js所在的路径;--> <a href="./index.html">return index</a><!--相对路径,相对于/fs/-->
当点击“回到首页”,发送的url为 "http://localhost:8080/html/index.html"
当点击“return index”,发送的url为 "http://localhost:8080/fs/index.html",因此出错
4.爬虫时使用request()函数报错
以下错误并不是ssl/ 错误
仅仅是请求端口写错
stackoverflow : http://stackoverflow.com/questions/21135637/error140770fcssl-routinesssl23-get-server-hellounknown-protocol