node基础11:接受参数

1.接收参数

在Node中接受GET/POST请求的参数不像PHP那样,在PHP中直接有全局变量$_GET,$_POST来接受url,或者请求体重的参数。

在node中接受GET参数使用url.parse(req.url, true).query可以获取请求参数,使用queryString.parse(data)来从请求体中来获取字段。

// server.js
var http = require("http");
var url = require('url');
var router = require('./router');

http.createServer(function(req, res){
    if ( req.url !== '/favicon.ico'){
        pathname = url.parse(req.url).pathname.replace(/\//,'');
        console.log(pathname);
        try {
            router[pathname](req, res);
        } catch(e) {
            console.log('error:'+e);
            res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'});
            res.write(e.toString());
            res.end();
        };
    }
}).listen(3000);
console.log("server running at http:127.0.0.1:3000");
/**
 * router.js
 */
var fs = require('fs');
var url = require('url');
var querystring = require('querystring'); //post需要导入

module.exports = {
    login: function(req, res){

        /*****  GET 为同步获取参数 ***/
        /* GET接受参数
            var rdata = url.parse(req.url, true).query;
            console.log(rdata);
            if (rdata['email']!=undefined) {
                console.log(rdata['email']);
            }
        */
        /*****  GET 为同步获取参数 ***/

        /**************POST***********异步*********************/
        var post ='';
        req.on('data', function(chunk){
            post += chunk;
        });
        req.on('end', function(){
            post = querystring.parse(post);
            console.log('收到参数:'+post['username']); //因为这里是异步,所以不能使用 res.write();
            console.log('收到参数:'+post['password']);
            //console.log('收到参数:'+post); // Cannot convert object to primitive value
            // *** 这里会报错哟!!!! ***


            
            fs.readFile('./login.html', function(err, data){
                if( err){
                    console.log(err);
                    res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'})
                    res.write(err.toString());
                    res.end();
                } else {
                    res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'})
                    res.write(data);
                    res.end();
                }
            })
        })
        /*************************异步*********************/


    },
    register:function(req, res){
        fs.readFile('.register.html', function(err, data){
            if(err) {
                console.log(err);
                res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'})
                res.write(err.toString());
                res.end();
                return;
            } else{
                res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'});
                res.write(data);
                res.end();
            }
        })
    },
    showImage:function(req, res){
        fs.readFile('./test.png',function(err, data){
            if (err) {
                console.log(err);
                return;
            } else{
                console.log("开始读取图片");
                res.writeHead(200, {'Content-Type':'image/jpeg'});
                res.write(data);
                res.end();//写在互调函数外面会报错的哟
            }
        })
    }

}

 

转载于:https://www.cnblogs.com/noper/p/6254291.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值