2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

jQuery Javascript Node.js 備忘録

Last updated at Posted at 2018-06-28

自分のための jQuery 備忘録

メモさがすよりQiita見るかググる方が早いから、ここにメモ追加していく。

jQuery

オブジェクト拡張

//$('<div>')を拡張する
jQuery.extend( this , $('<div>') );

input checkbox

チェックする/しない。

$('<input>').prop('checked',true);
$('<input>').prop('checked',false);

チェック状態取得

$('<input>').prop('checked'); // true or false

click

クリックを設定した元情報

$('<button>').click(function(e){
    console.log( $(this) );//これがbutton
});

こう書けば、たとえbuttonに子要素が追加されて、それの部分を押されてclickが発動したとしても確実にbutton要素を取れる。
これは $('<button>').attr("msg","help"); みたいにattrに何か仕込んでいたものを取得する時に役立つ。

Javascript

formdata

基本

var fd = new FormData();
fd.append('key',value);

fdではオブジェクトは送信できない。

var obj = {
    hoge:"fuga",
};
fd.append('key',obj);//NG

なのでjson文字列なんかにして送信して、サーバー側でobjectに戻す必要がある。

JSON

オブジェクトをjson文字列にする

JSON.stringify(obj);

json文字列をオブジェクトにする

JSON.parse(jsonString);

objectのコピー

var origin = { hoge:"huga"};
var newObj = {};
Object.assign( newObj , origin );
//=> newObj = { hoge:"huga"}; になる

正確にはマージらしい。
なので、以下のような場合だと思ったようにならない。

var origin = [{ hoge:"huga"}];
var newObj = {};
Object.assign( newObj , origin );
//=> newObj = {"0",{ hoge:"huga"}}; になる

ちなみにnewObjの初期値がnullだとエラー。undefinedも多分ダメ。
どんなものでもコピーしたい場合は以下にするとよいかも。

var origin = { hoge:"huga"};
//一度json文字列に変換
var str    = JSON.stringify( origin );
//json文字列からobjectに戻す
var newObj = JSON.parse(str);

Node.js

CORS(Cross-Origin Resource Sharing)

  • ブラウザがオリジン(HTMLを読み込んだサーバのこと)以外のサーバからデータを取得する仕組み。
  • 各社のブラウザには、クロスドメイン通信を拒否する仕組みが実装されている。
  • これは、クロスサイトスクリプティングを防止するため。

expressでCORSを許可する場合

以下をPOSTなどのアクセスが来た時のresに仕込んでやる。
app.post('/hoge',function(req,res){
    res.setHeader("Access-Control-Allow-Origin","*");
    res.setHeader("Access-Control-Allow-Methods","POST, GET, OPTIONS, PUT, DELETE");
    res.setHeader("Access-Control-Allow-Headers", "Content-Type");
    res.send("hi!");
});
PUTの場合の注意点

PUTの場合、POSTと違って、preflightという先触れのようなものが来る。「今からCORSでPUTアクセスするけどいいっすか?」みたいなやつ。
まずそれに応答してから本ちゃんのPUTリクエストが来るらしい。
なので、2回返してやる必要がある。

最初にここに来る
app.options('/*',function(req,res){
    res.setHeader("Access-Control-Allow-Origin","*");
    res.setHeader("Access-Control-Allow-Methods","POST, GET, OPTIONS, PUT, DELETE");
    res.setHeader("Access-Control-Allow-Headers", "Content-Type");
    res.send();
});
次に本ちゃんがくる
app.put('/hoge',function(req,res){
    res.setHeader("Access-Control-Allow-Origin","*");
    res.setHeader("Access-Control-Allow-Methods","POST, GET, OPTIONS, PUT, DELETE");
    res.setHeader("Access-Control-Allow-Headers", "Content-Type");
    res.send("hi!");
});

という感じぽい。
もっと効率良いやり方がありそうなんだけどよくわからん。

MongoDB Mongoose

userIdがhogeの人のデータだけ更新

hogeModel.update( {userId:"hoge"}, {$set: setData }, callback);

{upsert: true} .. データが存在すれば更新。なければ挿入。便利。

hogeModel.update( {id:'abc' ,userId:'hoge'}, data , {upsert: true} ,callback);

クエリにundefinedを突っ込むと指定なしと一緒

hogeModel.update( {userId:undefined}, {$set: setData }, callback);

エラーが出ると思うじゃないですか。
出ないんですよ。
指定なしと一緒みたい。
どうも仕様ぽいなぁ。
使っているバージョンは4.1.3

2
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?