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) + ')';

总结:

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

  

  

原文地址:https://www.cnblogs.com/webARM/p/5452570.html