最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - execute a Nodejs script from an html page? - Stack Overflow

programmeradmin3浏览0评论

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
Add a comment  | 

1 Answer 1

Reset to default 13

I 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

发布评论

评论列表(0)

  1. 暂无评论