這篇博客主要實現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);
});
