n8n 新增code節點,跳脫json字串

json字串有些特殊字元,需要跳脫後才能正常使用。因此有必要在n8n加上code節點寫javascript 跳脫。

const chars = {
  "\"": "\\\"",
  "\\": "\\\\",
  "\/": "\\/",
  "\u0000": "\\u0000",
  "\u0001": "\\u0001",
  "\u0002": "\\u0002",
  "\u0003": "\\u0003",
  "\u0004": "\\u0004",
  "\u0005": "\\u0005",
  "\u0006": "\\u0006",
  "\u0007": "\\u0007",
  "\u0008": "\\u0008",
  "\u0009": "\\u0009",
  "\u000A": "\\u000A",
  "\u000B": "\\u000B",
  "\u000C": "\\u000C",
  "\u000D": "\\u000D",
  "\u000E": "\\u000E",
  "\u000F": "\\u000F",
  "\u0010": "\\u0010",
  "\u0011": "\\u0011",
  "\u0012": "\\u0012",
  "\u0013": "\\u0013",
  "\u0014": "\\u0014",
  "\u0015": "\\u0015",
  "\u0016": "\\u0016",
  "\u0017": "\\u0017",
  "\u0018": "\\u0018",
  "\u0019": "\\u0019",
  "\u001A": "\\u001A",
  "\u001B": "\\u001B",
  "\u001C": "\\u001C",
  "\u001D": "\\u001D",
  "\u001E": "\\u001E",
  "\u001F": "\\u001F",
  "\u007F": "\\u007F",
  "\u0080": "\\u0080",
  "\u0081": "\\u0081",
  "\u0082": "\\u0082",
  "\u0083": "\\u0083",
  "\u0084": "\\u0084",
  "\u0085": "\\u0085",
  "\u0086": "\\u0086",
  "\u0087": "\\u0087",
  "\u0088": "\\u0088",
  "\u0089": "\\u0089",
  "\u008A": "\\u008A",
  "\u008B": "\\u008B",
  "\u008C": "\\u008C",
  "\u008D": "\\u008D",
  "\u008E": "\\u008E",
  "\u008F": "\\u008F",
  "\u0090": "\\u0090",
  "\u0091": "\\u0091",
  "\u0092": "\\u0092",
  "\u0093": "\\u0093",
  "\u0094": "\\u0094",
  "\u0095": "\\u0095",
  "\u0096": "\\u0096",
  "\u0097": "\\u0097",
  "\u0098": "\\u0098",
  "\u0099": "\\u0099",
  "\u009A": "\\u009A",
  "\u009B": "\\u009B",
  "\u009C": "\\u009C",
  "\u009D": "\\u009D",
  "\u009E": "\\u009E",
  "\u009F": "\\u009F"
};
$json.output = $input.first().json.output.replace(/[\"\\\/\u0000-\u001F\u007F\u0080-\u009F]/g, match=>chars[match]);
return $input.all();

讓Content-Disposition解決非英文檔案,下載亂碼問題

這是老問題了,很多老外都忽略這個,我在協助teedy翻譯時,發現下載中文檔案中文會出現空白,看一下程式原來是忘了進行編碼導致,就順手提交一下解法。

#以下為java虛擬碼
CONTENT_DISPOSITION, "inline; filename*=utf-8''" + filenameEncode( "檔名" )

private String filenameEncode(String name) {
try {
return java.net.URLEncoder.encode(name, "UTF-8").replace("+", "%20");
} catch (java.io.UnsupportedEncodingException e) {
e.printStackTrace();
return name;
}
}

參考 :

自製郵件伺服器啟動腳本

我用自製的docker版郵件伺服器已經一陣子了, 每次要組合出腳本很麻煩, 我又不喜歡用yaml文件, 因此利用github的免費pages, 自己寫了一個簡易自動產生腳本的網頁, 還滿方便的, 頁面難看就請多包涵.

https://williamfromtw.github.io/docker-Postfix-AD/genLaunchCommand.html

google翻譯 與 隱私權宣告

最近遇到android app若要正式上架, 得製作隱私權宣告頁面

而這隱私權又要弄很多語系怎辦, 這時候就要在宣告中加上翻譯功能了

  • 加上java script function
<script>
function googleTranslateElementInit() {
  new google.translate.TranslateElement({
    pageLanguage: 'en',
    layout: google.translate.TranslateElement.InlineLayout.SIMPLE
  }, 'google_translate_element');
}
</script>
<script src="https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
  • 頁面插入一段div
<div id="google_translate_element"></div>
  • 若需要限定語系, 請於javascript 的 pageLanguage: ‘en’, 底下, 加上 語系限定

includedLanguages: 'zh-CN,zh-TW',

JQuery不熟真的很麻煩,光是傳資料到後端就一堆要強記的

  • 傳單一資料
$.when(
  $.getJSON("yyyServlet", {"FlowID" : "doQuery"})
).done( function(returnData){
   alert(returnData)  // 不用加上[0]即可取得回傳資料
})
  • 傳多資料到多個後端
$.when(
  $.getJSON("xxxServlet", {"FlowID" : "getJsGridSelectOptions"}),
  $.getJSON("yyyServlet", {"FlowID" : "doQuery"})
).done( function(returnData1,returnData2){
  alert(returnData1[0])  // 第一個json回傳值,要加上[0]才能抓到資料
  alert(returnData2[0])  // 第二個json回傳值,要加上[0]才能抓到資料
})

人不能太貪心, 又是前端, 後端, 又是mobile app, 又是k8s,docker容器, 領域差太多,很容易忘東忘西

javascript 將form輸入的資料轉成json

function getFormDataAsJson(sFormId) {

    var form = $('#' + sFormId);
    if (form != null) {
        var json = {};

        var inputs = $('input', form);

        for (i = 0; i < inputs.length; ++i) {
            var next = inputs[i];
            var key = $(next).attr('id');
            var val = $(next).val();

            if (val != null && key != null)
                json[key] = val;
        }

        var selects = $('select', form);

        for (i = 0; i < selects.length; ++i) {
            var next = selects[i];
            var key = $(next).attr('id');
            var val = $(next).val();

            if (val != null && key != null)
                json[key] = val;
        }
        console.log(json);
        return json;
    }
}