Prince追悼ダンスを踊りました

Princeが好きだったのですが、この前亡くなってしまいました。

Prnceにありがとうの気持ちを表現するべくPrince追悼ダンスを踊りました。



DynamoDBでテーブルに入っているデータをすべて取得する

Node.jsからDynamoDBでテーブルに入っている全てのデータを取得しようとするとscan()メソッドを使うのですが、デフォルトの挙動では 最大1MBまでのデータしか読み込むことができません。
すべてのデータを取得する場合は、scanした時に読み込めていないデータが有る場合はLastEvaluatedKeyが返ってきますのでこれを使って再帰的にscanする必要があります。

...
var db = new AWS.DynamoDB({apiVersion: '2012-08-10'});
readAll(callback) {
  var objects = [];
  var params = {
    TableName: ‘tablename’
  };
  doScan(params,(err,res) => {
    return callback(err,res);
  });
}

doScan(params,callback)  {
    
  
  db.scan(params,(err,res) => {

    //最後の内容まで取得できなかった場合はdoScanを繰り返す
    if (res['LastEvaluatedKey']){
      console.log('found last evaluatedKey');
      params.ExclusiveStartKey = res.LastEvaluatedKey;
      
      res.Items.map((item) => {
        objects.push(item);
      })
      this.doScan(params,callback);
    }else {
      //全てのデータが読み込めたらcallbackを返す
      console.log('finished scan’);
      res.Items.map((item) => {
        objects.push(item);
      })
      return callback(err, objects);
    }
  });
}

Javascriptで日付を扱うにはMoment.jsが便利

moment.jsとは

Moment.jsとはDate周りの処理を簡単にしてくれるライブラリです。Server側とClient側で動作するのでとても重宝しています。
この記事では自分がよく使うCode Snippetをまとめてみます。

現在のDateを作成

var now = moment();
//Sat Apr 09 2016 19:51:23 GMT+0900 (JST);

日付の表示を整形

var format ='YYYY/MM/DD HH:mm:ss'
now.format() 
//2016/04/09 03:48:20

日付の計算 add/subtract(props,num)

subtractで以前の日付、addで以降の日付を取得することができます。

add,subtractの第一引数には以下の表に対応する文字列、第二引数には数値を代入することで自由に日付を計算することができます。

時間
yearmonthsdayshoursminutesseconds

例えば昨日の日付を取得したい場合は

moment.subtract('days',1)
明日の日付を取得したい場合は
moment.add('days',1)
のコードを実行します。

1日の始まりを取得

 var now = moment.startof('days');

momentをDate型に変換する

 var time = now.toDate().getTime();

まとめ

今回初めてmoment.jsを使ったのですが、今まで面倒だった日付周りの計算や整形が簡単に行うことができますし、 toDate()を呼ぶことで簡単にDate型に変換できるので、使っていて非常に安心感があるいいライブラリだなと思いました。

今後の案件でもmoment.jsを積極的に使用していきたいです。

AjaxでファイルをPOSTする

FormDataを作成するのがポイント。



//fileオブジェクトを持つformDataを作成

let file = document.getElementById(“fileID”).files[0]
let form = new FormData();
form.append('file',file);



//Ajax

let url = ‘http://URL_FOR_POST’;
	
$.ajax({
    url: url,
    data: form,
    processData: false, 
    contentType: false, 
    type: 'POST',
    success: (data) => {
	return resolve(data);
    },
    error: (err) => {
	return reject(err);
    }
});