访问:127.0.0.1/?a=1&b=2$c=3
var http = require(‘http’); var url = require(‘url’);
http.createServer(function(req, res) { res.writeHead(200, {‘Content-Type’: ‘text/html’}); res.write(‘Node.js’);
var res_data=url.parse(req.url,true); res.write(res_data.query.b);
console.log(res_data.query);//控制端输出
res.end(’’); }).listen(80);
以上是我的代码; 有2个问题 我一直搞不明白
第一个问题 console.log(res_data.query); 这个代码终端会运行会被运行2次 结果为:{ a: ‘1’, b: ‘2’, c: ‘3’ }与{} 为什么会两次啊?
第二个问题 终端既然都输入了res_data.query 是集合 那么我客户端返回求情的参数是应该没有问题的 可是还是有错 res.write(res_data.query.b); 终端显示 参数必须为first argument must be a string or Buffer 字符串 我改成 res.write(res_data.query.b+’’);加一个空字符 强制转化为字符串 就没报错了 为神马啊啊啊
第一个问题 解决了 当我们在服务器访问网页时,我们的服务器可能会输出两次“Request received.”。那是因为大部分服务器都会在你访问 http://localhost:8888 /时尝试读取 http://localhost:8888/favicon.ico
我用你的代码运行没错啊!
127.0.0.1/?a=1&b=2$c=3
有$这个???
看终端。 客户端是没错的
好眼里啊,就是哪里有错 但是B的值也应该出来呗 可惜终端还是有错
b = “2$c=3”
因为data.query是一个序列化的字符串,js中字符串是不能通过xx.b获取自身的对象属性的,所以你的data.query.b返回的是一个null 当用res.write()的时候参数必须是string和buffer类型的 你null + “” 是将null强转为"null"
在127.0.0.1/?a=1&b=2$c=3后续的请求如 http://localhost:8888/favicon.ico 会导致res_data.query.c是undefined,res.write(undefined)肯定要报错啊
哈哈 谢谢, 自己都找出答案来了 结果还不知道
再多问一个问题,如何屏蔽访问这个啊 favicon.ico
@zhouaini528 这个是默认访问的,可以拦截它。 if (req.url === ‘/favicon.ico’) { res.writeHead(200, {‘Content-Type’: ‘image/x-icon’} ); res.end(); return; }
@maiwenan 看来还是只有手动来阻止啊