部署後的驚喜

AJAX URL設置

另外Deploy完才發現AJAX的URL出了問題,又花了兩三個小時才解決這個問題(處處是驚喜啊汗顏)
首先 AJAX的URL預設是不能跨站請求的(有解),所以理論上所有的URL都是指向Server,所以在URL解析上自帶Server IP,舉例來說

$.ajax({
    type: "POST",
    //自動轉成 http://server_ip/signup
    url: "/signup",
    data: sendData,
    success: function(data){
    },
    error: function(data){
    }
});

但你也可以設定絕對路徑(這個詞怪怪的,但我想不到更好的用語)

$.ajax({
    type: "POST",
    url: "http://server_ip/signup",
    data: sendData,
    success: function(data){
    },
    error: function(data){
    }
});

我一開始在local端開發,全部用絕對路徑http://127.0.0.1:300/...開發,deploy到Server出現了跨站請求失敗,後來還跑去[stackoverflow發問](http://stackoverflow.com/questions/35767024/how-to-set-global-variables-by-command), 真的是好傻啊,在Client端發出localhost請求當然會失敗啊OTZ
後來開始想如何動態設置AJAX的URL,所幸自己怒寫一個Shell Script

Shell Script與動態設置Config

設定的想法很簡單
1.取得AWS的public IP
2.設置一個nodeJS檔讀取IP輸入值
3.將IP輸入值寫到JSON file中
4.各個JS file 讀取此JSON file裡頭的Server IP,完成AJAX URL設置

以下是我編寫的檔案
myURL.js->步驟2&3

var fs = require("fs");

setUpURL();
//Set up URL
function setUpURL(){
  var myURL = process.argv[2];
  console.log('myURL: ', myURL);
  console.log("success");
  var outputFilename = 'public/myURL.json';
  var myData = {
    port:myURL
  }
  console.log(myData);
  fs.writeFile(outputFilename, JSON.stringify(myData, null, 4), function(err) {
      if(err) {
        console.log(err);
      } else {
        console.log("JSON saved to " + outputFilename);
      }
  });
};

init.sh->步驟1(記得要 chmod +x init.sh修改權限喔) 此方法只適用於AWS

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
//取得AWS Server public IP
line="$(curl http://169.254.169.254/latest/meta-data/public-ipv4)"
echo $line
node myURL.js "http://"$line":3000"
exit 0

各別JS file需要讀取myURL.json(注意各個URL可能會有所不同,我是設置在/public/底下)

var myURL;
$.getJSON("myURL.json", function(json) {
    myURL = json.port.toString();
    console.log(myURL);
});
$.ajax({
    type: "POST",
    url: myURL+"/signup",
    data: sendData,
    success: function(data){
    },
    error: function(data){
    }
});

只要第一次執行init.sh之後就OK了 但真正簡單的解決方式是用地一種相對路徑的URL設置...我會發現這一點是因為一開始我的myURL設成"server_ip"而非"http://server_ip" ,結果發ajax時出現 "http://server_ip/server_ip" 連出現兩次,後來才恍然大悟OTZ