I am currently using Express.js to create my website.
My main server script is called index.coffee
. I also created a script called request.js
that makes a GET request and displays the response with
console.log(list);
I have no problems when running the script from the console: node request.js
My question is: How do I make the "Get this list" button on my the page respond to a click by displaying the list on the same page (that is, executing request.js
on the server and showing the result)?
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 -> "hey"
I am currently using Express.js to create my website.
My main server script is called index.coffee
. I also created a script called request.js
that makes a GET request and displays the response with
console.log(list);
I have no problems when running the script from the console: node request.js
My question is: How do I make the "Get this list" button on my the page respond to a click by displaying the list on the same page (that is, executing request.js
on the server and showing the result)?
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 -> "hey"
Share Improve this question edited Mar 12, 2012 at 19:13 Louis asked Mar 12, 2012 at 15:45 LouisLouis 6223 gold badges10 silver badges27 bronze badges 4- 1 You should make a request handler (like you do for your index page) which executes the code in request.js... You can use an Ajax call to pull this data back and load it in the page. – Fosco Commented Mar 12, 2012 at 16:14
- Ok do you have any tutorials for request handler and an ajax way to be able to pull this data back ^^ ? I am really new to node and Ajax. And thanks for your answer ! – Louis Commented Mar 12, 2012 at 16:17
- You should post your code as it is now. I don't use coffee script so I can't provide a full solution, but surely someone else will be able to help (if the code is here.) – Fosco Commented Mar 12, 2012 at 16:19
- I am going to do that then thanks :) ( the solution in html would also be fine to me ^^ ) – Louis Commented Mar 12, 2012 at 16:24
1 Answer
Reset to default 13I use plain JS and not coffee script, so here's an example per Fosco's comment (call it 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);
Write your index.html
file, and save it in the /public
subfolder of your node app directory (which is exposed above, via 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>
If you're including your request.js as a module, it could be as follows:
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;
Run node server.js
on your server. Then head over to www.yoursite.com/index.html