web-dev-qa-db-fra.com

exécuter un script Nodejs à partir d'une page html?

J'utilise actuellement Express.js pour créer mon site Web. Mon script de serveur principal s'appelle index.coffee. J'ai également créé un script appelé request.js qui fait une requête GET et affiche la réponse avec

  console.log(list);

Je n'ai aucun problème lors de l'exécution du script à partir de la console: node request.js

Ma question est la suivante: comment faire en sorte que le bouton "Obtenir cette liste" de ma page réponde à un clic en affichant la liste sur la même page (c'est-à-dire en exécutant request.js sur le serveur et montrant le résultat)?

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 -> "hé"

13
Louis

J'utilise du JS simple et non du script café, voici donc un exemple d'après le commentaire de Fosco (appelez-le 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);

Écrivez votre index.html fichier, et enregistrez-le dans le /public sous-dossier de votre répertoire d'application de noeud (qui est exposé ci-dessus, 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>

Si vous incluez votre request.js en tant que module, cela pourrait être comme suit:

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;

Courir node server.js sur votre serveur. Rendez-vous ensuite sur www.yoursite.com/index.html

10
Wes Johnson