Node.js中参数传递的两种方式详解

目录
  • 参数传递方式
  • GET方式
  • POST方式
  • 动态网页

参数传递方式

在Node.js中,参数传递常见的共两种方式:

  • GET方式:通过地址栏键=值的方式进行传递。
  • POST方式:通过表单的方式传递请求数据。

GET方式

GET方式通常是在请求地址中以【?参数1=值1&参数2=值2】的格式进行传递,在Node.js中可以通过获取url然后进行获取参数,如下所示:

//1.引入http模块
var http  = require('http');
//2.创建服务
var server = http.createServer();
//3. 监听请求事件,当有请求时,触发回调函数
server.on('request',function(req,res){
    res.writeHead(200,{"content-type":"text/html;charset=utf-8"});
    var url = req.url;
    if(url.indexOf('?')>0){
        params = url.split('?')[1];
        paramArray = params.split('&');
        res.write("<h3>请求的参数为:</h3>");
        for(var index in paramArray){
            res.write(paramArray[index])
            res.write("<br />");
        }
    }
    res.end();
});

//4. 监听8080端口
server.listen(8080,function(){
    console.log("server is running");
});

运行示例,在浏览器中打开,如下所示:

POST方式

目前一般采用form表单的方式传递POST数据。在Node.js中,POST传递的数据在请求体中。

首先创建一个reg.html静态html页面,然后提交数据到action.html,具体如下所示:

//1.引入http模块
var http  = require('http');
var fs = require('fs');
var path = require('path');
//2.创建服务
var server = http.createServer();
var extnames = {".html":"text/html",".css":"text/css",".png":"image/png"};
//3. 监听请求事件,当有请求时,触发回调函数
server.on('request',function(req,res){
    var url=req.url;
    if(url==="/"){
        url="/index.html";
    }
    var localPath = './www'+url;
    var extname = path.extname(localPath);
    res.writeHead(200,{"content-type":""+extnames[extname]+";charset=utf-8"});
    if(url==="/action.html"){
        //从请求主体中获取POST方式传输的数据
        var params='';
        req.on('data',function(data){
            params += data.toString();
        });
        //监听结束事件
        req.on('end',function(){
            res.write("<h3>后台已经收到请求:</h3>");
            res.write(params);
            res.end();

        });
        return;
    }

    console.log(localPath);
    if(extname===".ico"){
        res.end();
    }else{
        fs.readFile(localPath,function(err,data){
            res.write(data);
            res.end();
        });
    }
});

//4. 监听8080端口
server.listen(8080,function(){
    console.log("server is running");
});

运行服务,然后在浏览器输入网址,如下所示:

注意:可以看出,GET方式和POST方式的参数结构都是一样的,只是GET通过URL,POST通过请求主体。

动态网页

在之前的示例中,所有的html页面都是静态页面,不会随着用户请求的变化而变化。那如何动态的变更网页呢?答案是采用模板。

首先创建一个html页面,并在页面中定义一个变量。如下所示:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>这是首页</title>
        <link type="text/css" href="css/index.css" rel="external nofollow"  />
    </head>
    <body>
        <h3>这是首页</h3>
        <h3>你的访问IP为:</h3>
        <h3><%=ipAddr%></h3>
    </body>
</html>

然后在Node.js后端程序中,动态获取变量的值,并进行替换,如下所示:

var http  = require('http');
var fs = require('fs');
var path = require('path');
//2.创建服务
var server = http.createServer();
var extnames = {".html":"text/html",".css":"text/css",".png":"image/png"};
//3. 监听请求事件,当有请求时,触发回调函数
server.on('request',function(req,res){
    var url=req.url;
    if(url==="/"){
        url="/index.html";
    }
    var localPath = './www'+url;
    var extname = path.extname(localPath);
    res.writeHead(200,{"content-type":""+extnames[extname]+";charset=utf-8"});
    console.log(localPath);
    if(extname===".ico"){
        res.end();
    }else{
        fs.readFile(localPath,function(err,data){
            var ip = req.socket.remoteAddress;
            var content  = render(data.toString(),'<%=ipAddr%>',ip);
            res.write(content);
            res.end();
        });
    }
});

//4. 监听8080端口
server.listen(8080,function(){
    console.log("server is running");
});

function render(html,name,value){
    return html.replace(name,value);
}

运行示例,在浏览器中输入http://http://127.0.0.1:8080/,如下所示:

注意:IP为客户端IP,随着访问的客户端电脑而改变。

以上示例都是Node.js的原生开发方式,存在诸多不便,后面将通过引入框架来提高开发的效率。

到此这篇关于Node.js中参数传递的两种方式详解的文章就介绍到这了,更多相关Node.js参数传递方式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • node.js处理前端提交的GET请求

    前言:AJAX的盛行,使得浏览器与服务器之间的交互越来越强大,我们需要通过 HTTP 通信,并从中提取出请求的 URL 以及 GET/POST 参数.随后需要根据这些数据来执行相应的操作,从而实现前后端交互. 一.获取GET请求流程 1.首先和以前一样,在server.js同目录下创建一个act文件夹,并在里面创建一个index1.html文件夹.index1.html代码为: <body> <a href="index2.html" rel="extern

  • node.js中路由,中间件,ge请求和post请求的参数详解

    一.路由 1.什么是路由 服务器需要根据不同的URL或请求来执行不一样的操作,我们可以通过路由来实现这个步骤 2.实现路由的方法 2.1.get请求访问网址时,做什么事 app.get("网址",function(req,res){ }); 2.2.post请求访问网址时,做什么事 app.post("网址",function(req,res){ }); 2.3.任何请求访问这个网址 app.all("网址",function(){ }); 注意

  • node.js获取参数的常用方法(总结)

    1.req.body 2.req.query 3.req.params 一.req.body例子 body不是nodejs默认提供的,你需要载入body-parser中间件才可以使用req.body,这个方法通常用来解析POST请求中的数据 <form action='/test' method='post'> <input type='text' name='name' value='lmw'> <input type='text' name='tel' value='12

  • 详解Node.Js如何处理post数据

    实现思路 将data和end事件的回调函数直接放在服务器中,在data事件回调中收集所有的POST数据,当接收到所有数据,触发end事件后,其回调函数调用请求路由,并将数据传递给它,然后,请求路由再将该数据传递给请求处理程序. 实现步骤 第一步我们设置了接收数据的编码格式为UTF-8,第二步注册了"data"事件的监听器,用于收集每次接收到的新数据块,并将其赋值给postData 变量,最后第三步我们将请求路由的调用移到end事件处理程序中,以确保它只会当所有数据接收完毕后才触发,并且

  • Node.js系列之发起get/post请求(2)

    服务器与浏览器的交互主要方式有get/post请求. 下面,我们来看一下node.js发起get/post请求. 1.get 由于get请求的参数在url后面,所以相对比较简单.node.js中的url模块提供了parse函数来处理.具体代码如下: //引入模块 var http=require('http'); var url=require('url'); var util=require('util'); //创建http Server 处理请求 http.createServer(fun

  • Node.js中参数传递的两种方式详解

    目录 参数传递方式 GET方式 POST方式 动态网页 参数传递方式 在Node.js中,参数传递常见的共两种方式: GET方式:通过地址栏键=值的方式进行传递. POST方式:通过表单的方式传递请求数据. GET方式 GET方式通常是在请求地址中以[?参数1=值1&参数2=值2]的格式进行传递,在Node.js中可以通过获取url然后进行获取参数,如下所示: //1.引入http模块 var http = require('http'); //2.创建服务 var server = http.

  • node.js中grunt和gulp的区别详解

    node.js中grunt和gulp的区别详解 自nodeJS登上前端舞台,自动化构建变得越来越流行.目前最流行的当属grunt和gulp,这两个光看名字挺像,功能也差不多,不过gulp能在grunt这位大哥如日中天的境况下开辟出自己的一片天地,有着她独到的优点. 易用 Gulp相比Grunt更简洁,而且遵循代码优于配置策略,维护Gulp更像是写代码. 高效 Gulp相比Grunt更有设计感,核心设计基于Unix流的概念,通过管道连接,不需要写中间文件. 高质量 Gulp的每个插件只完成一个功能

  • 使用Node.js实现ORM的一种思路详解(图文)

    ORM是O和R的映射.O代表面向对象,R代表关系型数据库.二者有相似之处同时也各有特色.就是因为这种即是又非的情况,才需要做映射的. 理想情况是,根据关系型数据库(含业务需求)的特点来设计数据库.同时根据面向对象(含业务需求)的特点来设计模型(实体类).然后再去考虑如何做映射.但是理想很骨jian感dan,现实太丰fu满za. 没见哪个ORM是这么做的,也没见哪位高手会这么做设计.那么实际情况是什么样子的呢?以.net的Entity Framework为例. DB frist,就是先设计好数据库

  • springboot 注册服务注册中心(zk)的两种方式详解

    在使用springboot进行开发的过程中,我们经常需要处理这样的场景:在服务启动的时候,需要向服务注册中心(例如zk)注册服务状态,以便当服务状态改变的时候,可以故障摘除和负载均衡. 我遇到过两种注册的途径: 1.在Spring的webapplication启动完成后,直接进行注册: 2.在servlet容器启动完成后,通过listener进行注册. 本文通过一个demo讲述一下这两种注册方式,使用的是传统的向zk注册的方案. 1.Spring webapplication启动完成后注册 先上

  • RabbitMQ 实现延迟队列的两种方式详解

    目录 1. 用插件 1.1 安装插件 1.2 消息收发 2. DLX 实现延迟队列 2.1 延迟队列实现思路 2.2 案例 3. 小结 定时任务各种各样,常见的定时任务例如日志备份,我们可能在每天凌晨 3 点去备份,这种固定时间的定时任务我们一般采用 cron 表达式就能轻松的实现,还有一些比较特殊的定时任务,向大家看电影中的定时炸弹,3分钟后爆炸,这种定时任务就不太好用 cron 去描述,因为开始时间不确定,我们开发中有的时候也会遇到类似的需求,例如: 在电商项目中,当我们下单之后,一般需要

  • Spring Bean属性注入的两种方式详解

    目录 属性注入概念 一.构造器注入 示例1 注意点 二.setter注入 示例2 三.如何选择注入方式 属性注入概念 Spring 属性注入(DI依赖注入)有两种方式:setter注入,构造器注入. 这个注入的属性可以是普通属性(基本数据类型与String等),也可以是一个引用数据类型(主要是对象),或者是一个集合(list.map.set等) 下表是属性注入bean标签中常用的元素 元素名称 描述 constructor-arg 构造器注入.该元素的 index 属性指定构造参数的索引(从 0

  • Android事件处理的两种方式详解

    安卓提供了两种方式的事件处理:基于回调的事件处理和基于监听的事件处理. 基于监听的事件处理 基于监听的事件处理一般包含三个要素,分别是: Event Source(事件源):事件发生的场所,通常是各个组件 Event(事件):事件封装了界面组件上发生的特定事件(通常就是用户的一次操作) Event Listener(事件监听器):负责监听事件源发生的事件,并对各种事件作出相应的响应 下面使用一个简单的案例介绍按钮事件监听器 布局文件就是简单的线性布局器,上面是一个EditText,下面是一个Bu

  • IOS 指纹识别两种方式详解及实例

    IOS 指纹识别两种方式详解及实例 首先引入类名: #import <LocalAuthentication/LocalAuthentication.h> 然后在实现指纹识别的地方放入如下代码: 方式一: LAContext *lacontext = [[LAContext alloc]init]; // 判断设备是否支持指纹识别 BOOL isSupport = [lacontext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWit

  • 对Python使用mfcc的两种方式详解

    1.Librosa import librosa filepath = "/Users/birenjianmo/Desktop/learn/librosa/mp3/in.wav" y,sr = librosa.load(filepath) mfcc = librosa.feature.mfcc( y,sr,n_mfcc=13 ) 返回结构为(13,None)的np.Array,None表示任意数量 2.python_speech_features from python_speech_

  • 对node.js中render和send的用法详解

    大多数情况下,渲染内容用res.render(),将会根据views中的模板文件进行渲染.如果不想使用views文件夹,想自己设置文件夹名字,那么app.set("views","aaaa"); 如果想写一个快速测试页,当然可以使用res.send().这个函数将根据内容,自动帮我们设置了Content-Type头部和200状态码.send()只能用一次,和end一样.和end不一样在哪里?能够自动设置MIME类型. 如果想使用不同的状态码,可以: res.stat

随机推荐