現在 Express.js を使用してウェブサイトを作成しています。私のメインサーバースクリプトはindex.coffee
と呼ばれます。また、GETリクエストを作成してレスポンスを表示するrequest.js
というスクリプトを作成しました。
console.log(list);
コンソールからスクリプトを実行しても問題ありません:node request.js
私の質問は、同じページにリストを表示する(つまり、サーバーでrequest.js
を実行して結果を表示する)ことで、ページの[このリストを取得]ボタンをクリックに応答させるにはどうすればよいですか。
app.js
/**
* Module dependencies.
*/
var express = require('express')
, routes = require('./routes');
var app = module.exports = express.createServer();
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.set ('view engine', 'coffee');
app.register('.coffee', require('coffeekup').adapters.express);
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
app.get('/', function(req, res) {
res.render('index',{ layout: false });
});
app.listen(3000);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
index.coffee
doctype 5
html ->
head ->
body
p->「ねえ」
私はコーヒーのスクリプトではなくプレーンなJSを使用しているので、Foscoのコメントごとに例を示します(これをserver.js
と呼びます)。
var express = require('express'),
list = require('./request.js').Request; // see template
var app = express.createServer();
app.use(express.static(__dirname + '/public')); // exposes index.html, per below
app.get('/request', function(req, res){
// run your request.js script
// when index.html makes the ajax call to www.yoursite.com/request, this runs
// you can also require your request.js as a module (above) and call on that:
res.send(list.getList()); // try res.json() if getList() returns an object or array
});
app.listen(80);
index.html
ファイルを書き込んで、ノードアプリディレクトリの/public
サブフォルダーに保存します(上に公開されているのはexpress.static
を介して):
<html>
<body>
<div id="button">Get this List</div>
<div id="response"></div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#button').click(function() {
// run an AJAX get request to the route you setup above...
// respect the cross-domain policy by using the same domain
// you used to access your index.html file!
$.get('http://www.yoursite.com/request', function(list) {
$('#response').html(list); // show the list
});
});
});
</script>
</body
</html>
request.jsをモジュールとして含める場合、次のようになります。
var RequestClass = function() {
// run code here, or...
};
// ...add a method, which we do in this example:
RequestClass.prototype.getList = function() {
return "My List";
};
// now expose with module.exports:
exports.Request = RequestClass;
サーバーでnode server.js
を実行します。次にwww.yoursite.com/index.html
に向かいます