• NodeJS中常见异步接口定义(get、post、jsonp)


      越来越多的人在使用nodeJS,作为一门服务端语言,我们不可避免的要写异步接口(ajax和jsonp)。再次强调ajax和jsonp是两个概念,但是由于jquery的封装,使这两种异步接口的调用方式,看起来比较相近,但在底层差别还是比较大的(本文只写服务端的实现)。

      为了便于讲解我使用express框架来运行我的demo。并分别讲解如何获取参数,并返回结果。本文相当于一个基础篇,只写了一些常见的应用场景。漏掉一些复杂的场景,还望提醒。

    一、Ajax——post请求

      之所以先从post开始,是因为我想把get和jsonp挨的比较近一些。而且post获取参数的方式和两外两种相比差别比较大。

      一个基本的post请求:

     1 var express = require('express');var router = express.Router();
     2 
     3 router.post('/simplePost', function (req, res, next){
     4     var param = req.body;
     6     //console.log(param);
     7     //todo something
     9     res.json({"errorCode": 0,"errorMessage": 'save'});  
    11 });

      router是框架中定义路由的对象,我们相当于在router上绑定对应controller的回调函数。回调函数中会传入3个变量,分别封装了请求(req)、响应(res)和下一个中间件(next)。在post请求中参数被封装在req中的req.body 我们 console.log(param); 就可以在控制台看到参数了。通过一系列操作,当我们想返回结果(通常为json)的时候,就需要调用res下的json来将一个对象返回客户端(前端)。

    二、Ajax——get请求

      get 请求和post大体相近,但略有不同。不多说,先看代码:

     1 var express = require('express');
     2 var router = express.Router();
     3 var urllib = require('url');
     4 
     5 router.get('/simpleGet', function (req, res, next){
     6     var params = urllib.parse(req.url, true);
     7     //console.log('params',params);
     8     var query = params.query;
     9     // todo something
    10     res.json({"errorCode": 0,"errorMessage": 'save OK'});
    11 });

       get请求的参数不可以直接在req.body中取出,要想获取参数就要先加载“url”模块   var urllib = require('url'); 通过模块封装的方法parse取出包含参数的对象,并将query取出,这是打印query,就可以看到前端发来的参数了。至于返回结果,就合post一样了。

    三、jsonp

      jsonp实际上发出的是一个js文件请求,所以本质上是get请求(但不是Ajax)。jsonp在获取参数这块和get(ajax)是一样的。但不同在与返回结果的方式。

     1 var express = require('express');
     2 var router = express.Router();
     3 var urllib = require('url');
     4 
     5 router.get('/simpleJsonp', function (req, res, next){
     6     var params = urllib.parse(req.url, true);
     7     var reqData = {};
     8     var query = params.query;
     9     
    10     
    11     //res.send(reqData);
    12     //console.log(params);
    13 
    14         // todo somthing 
    15     if(params.query && params.query.callback){
    16         var str =  params.query.callback + '(' + JSON.stringify(reqData) + ')';//jsonp  
    17         res.end(str);
    18     }else{
    19         res.end(JSON.stringify(reqData));
    20     }
    21 });

      我们需要在获取参数后判断有没有约定好的回调函数的属性名“callback”  ——  if(params.query && params.query.callback){}。如果没有我认为我可以按普通的get(ajax)来处理,反之我认为是jsonp。jsonp需要将“调用”的方式,将结果返回: 

    params.query.callback + '(' + JSON.stringify(reqData) + ')';

    总结:

      这样就完成了常用异步接口的盘点,文中都是一些常见的最基本的场景。但是这也是复杂场景的基石。文中不对的地方还望大家多多斧正。

      

      

  • 相关阅读:
    ThinkPHP讲解(一)框架基础
    smarty简单介绍
    留言板
    文件系统处理
    文件上传(带有预览模式)
    文件上传(无预览模式版)
    注册、登陆、审核练习
    session讲解(二)——商城购物车练习
    session讲解(一)——登录网页练习
    P6216 回文匹配
  • 原文地址:https://www.cnblogs.com/webARM/p/5452570.html
Copyright © 2020-2023  润新知