node基础11:接受参数

Posted 花雨伞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();//写在互调函数外面会报错的哟
            }
        })
    }

}

 

以上是关于node基础11:接受参数的主要内容,如果未能解决你的问题,请参考以下文章

澄清 node.js + promises 片段

vscode代码片段建议bug

Node.js JavaScript 片段中的跳过代码

Node.js进击基础一(5-11事件模块)

07 函数基础1

nodejs入门案例与参数接受