zoukankan      html  css  js  c++  java
  • Swift&Node 使用Alamofire进行Post

    这篇博客主要实现Swift客户端和NodeJS后台的Post、Get请求实现。

    我是一个略有点讨厌重复使用工具的人,比如这些基本功能完全可以用OC和PHP等替代,但是没办法,现在知识更新的太快啦,Swift和NodeJS这么热,不去看看还会跟不上时代,里面一些特性也是让人大开眼界。

    下面就来说说实现吧。

    Swift客户端:

    Swift中的原生HTTP请求方式有(和OC中一样)

    1.NSURLConnection的sendSynchronousRequest方法(自iOS9.0起被废除)

    2. NSURLSession的dataTaskWithRequest方法可以进行Get或者Post请求

    (另外NSURLSession的downloadTaskWithRequest方法可以下载文件,uploadTaskWithRequest方法可以上传文件等

    这些就不在这篇博客里写了,在此主要实现使用第三方Alamofire的方法(类似OC里的AFNetworking)

    Alamofire:https://github.com/Alamofire/Alamofire

     

    Swift客户端提交:

    //
    //  ViewController.swift
    //  SwiftUrlSessionDemo
    //
    //  Created by shen on 15/11/25.
    //  Copyright © 2015年 shen. All rights reserved.
    //
    
    import UIKit
    import Alamofire
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            testGet()
            testPost()
            testUrlSession()
        }
        
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
        
        func testGet(){
            let para=["getpara1": "getxcode","getpara2":"getnodejs"];
            Alamofire.request(.GET, "http://localhost:8002/getdemo",parameters:para)
                .responseJSON { response in
                    //print(response.request)  // original URL request
                    //print(response.response) // URL response
                    //print(response.data)     // server data
                    //print(response.result)   // result of response serialization
                    if let JSON = response.result.value {
                        print("getJSON: (JSON)")
                    }
            }
        }
        
        func testPost(){
            let para=["postpara1": "postxcode","postpara2":"postnodejs"];
            Alamofire.request(.POST, "http://localhost:8002/postdemo",parameters:para)
                .responseJSON { response in
                    //print(response.request)  // original URL request
                    //print(response.response) // URL response
                    //print(response.data)     // server data
                    //print(response.result)   // result of response serialization
                    if let JSON = response.result.value {
                        print("postJSON: (JSON)")
                    }
            }
        }
      
        //URLSession方法:
        func testUrlSession(){
            let session = NSURLSession.sharedSession()
            let request = NSURLRequest(URL: NSURL(string: "http://localhost:8002/getdemo?para=session")!)
            let task = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in
                let string = NSString(data: data!, encoding: NSUTF8StringEncoding)
                print("returnStr:(string!)")
            })
            task.resume()
        }
    }

    后台使用的是NodeJS,使用Express和body-parser框架

    Node后台接收:

    var express = require('express');
    var bodyParser = require('body-parser');
    
    var app = express();
    var server = require('http').createServer(app);
    
    app.use(bodyParser.urlencoded({    
      extended: true
    }));
    
    var PORT = process.env.PORT || 8002;
    server.listen(PORT);
    console.log('Server running.');
    
    app.get('/getdemo', function (req, res) { 
    	console.log("Get method");
    	console.log(req.query); 
    	var returnDic = {resultStr: 'get request success'};
      	res.contentType('json');//返回的数据类型
        res.send(JSON.stringify(returnDic));//给客户端返回一个json格式的数据
    }); 
    
    app.post('/postdemo', function (req, res) { 
    	console.log("Post method");
    	console.log(req.body); 
    	res.send(req.body); 
    }); 
    

    demo:https://github.com/rayshen/SwiftUrlSessionDemo

  • 相关阅读:
    Git和SourceTree配合使用
    hive中数据存储格式对比:textfile,parquent,orc,thrift,avro,protubuf
    hive 实现类似 contain 包含查询
    hive函数 parse_url的使用
    Spring中注解方式的默认beanName生成规则
    @Autowired 与@Resource的区别
    js通过html的url获取参数值
    mysql模糊查询多个字段
    java获取调用当前方法的方法名和行数
    阿里druid数据源配置及数据库密码加密
  • 原文地址:https://www.cnblogs.com/rayshen/p/4994745.html
Copyright © 2011-2022 走看看