CNode

nodejs get传值的问题

Zzhouaini528发布于13 年前最后回复13 年前12 回复10290 浏览0 收藏

访问: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+'');加一个空字符 强制转化为字符串 就没报错了 为神马啊啊啊

查看回复

回复 (12)

Z
zhouaini528#1·13 年前

第一个问题 解决了 当我们在服务器访问网页时,我们的服务器可能会输出两次“Request received.”。那是因为大部分服务器都会在你访问 http://localhost:8888 /时尝试读取 http://localhost:8888/favicon.ico

M
mq1980#2·13 年前

我用你的代码运行没错啊!

S
sogego#3·13 年前

127.0.0.1/?a=1&b=2$c=3

有$这个???

Z
zhouaini528#4·13 年前
引用 mq1980我用你的代码运行没错啊!

看终端。 客户端是没错的

Z
zhouaini528#5·13 年前
引用 sogego127.0.0.1/?a=1&b=2$c=3 有$这个???

好眼里啊,就是哪里有错 但是B的值也应该出来呗 可惜终端还是有错

Z
zengwenbing#7·13 年前

因为data.query是一个序列化的字符串,js中字符串是不能通过xx.b获取自身的对象属性的,所以你的data.query.b返回的是一个null 当用res.write()的时候参数必须是string和buffer类型的 你null + "" 是将null强转为"null"

M
maiwenan#8·13 年前

在127.0.0.1/?a=1&b=2$c=3后续的请求如 http://localhost:8888/favicon.ico 会导致res_data.query.c是undefined,res.write(undefined)肯定要报错啊

M
maiwenan#11·13 年前
引用 maiwenan在127.0.0.1/?a=1&b=2$c=3后续的请求如 http://localhost:8888/favicon.ico 会导致res data.query.c是undefined,re...

@zhouaini528 这个是默认访问的,可以拦截它。 if (req.url === '/favicon.ico') { res.writeHead(200, {'Content-Type': 'image/x-icon'} ); res.end(); return; }

参与回复
登录后即可参与回复。登录