JSONPのAPIを実装する

JSONPのAPI(なのか?)を実装した事が無かったのでExpressを使って、Expressのjsonpメソッドは使わずに自分で実装してみた。

server1.js

ただHTMLなどを返すサーバの役割をする方の実装。

var express = require('express'),
    serveStatic = require('serve-static'),
    app = express();

app.use(serveStatic(__dirname + '/views'));
app.listen(4000);

server2.js

APIサーバの役割をする方の実装。

var express = require('express'),
    app = express();

app.get('/', function(req, res, next) {
  var callbackName = req.query.callback || 'callback',
      jsonData = { message: 'Hello!' };

  res.set({
    'Content-Type': 'text/javascript; charset=utf-8'
  });
  res.end(callbackName + '(' + JSON.stringify(jsonData) + ')');
});
app.listen(5000);

views/index.html

index.jsを読み込むだけのHTMLファイル。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>JSONP</title>
  </head>
  <body>
    <script src="index.js"></script>
  </body>
</html>

views/index.js

JSONPを受け取るJavaScriptファイル。

(function(){

  'use strict';

  window.callback = function(jsonData) {
    console.log(jsonData);
  };

  var script = document.createElement('script');

  script.src = 'http://127.0.0.1:5000/';
  document.body.appendChild(script);

}());

あとは必要なモジュールをインストールして、サーバを2つ起動してブラウザでhttp://localhost:4000/にアクセスする。

$ npm install express serve-static
$ node server1.js &
$ node server2.js &

ブラウザでアクセスするとブラウザのコンソールにログが表示されていてると思う。簡単だった。