10

I am writing a web application using Express framework to generate Impress.js presentations and apply a visual editor on them. I have set up the app.js for only getting the .html file but I want to inject a javascript code from a separate file before the body closing tag of the .html file.

For example, I will have a route handler /edit and then the script will be triggered after it have been injected into the html code.

var express = require('express');

var app = express();


app.configure(function(){
    app.use(express.static(__dirname + '/public'));
});

app.get('/:file', function(req, res) {
  res.sendfile(__dirname + '/public' + file);
});

app.listen(3000);
console.log('Listening on port 3000');

Any ideas on how to achieve this would be more than welcome!

giokokos
  • 602
  • 1
  • 6
  • 20

1 Answers1

16

Just an idea, but you could use something like cheerio to append a script to the body

app.get('/:file', function(req, res) {
  var html = fs.readFileSync(__dirname + '/public' + file, 'utf8');
  var $ = cheerio.load(html);
  var scriptNode = '<script>alert("script appended!");</script>';
  $('body').append(scriptNode);
  res.send($.html());
});
Adam Coulombe
  • 1,505
  • 1
  • 11
  • 11
  • It works! But now any other scripts already embedded in the .html aren't executed. How can I fix that? Thank you. – giokokos Mar 22 '13 at 17:16
  • what do you mean they arent executed? did it remove them? was there an error? please detail – Adam Coulombe Mar 22 '13 at 17:17
  • when I do console.log($.html()); I can see the scripts, eg. in the html but they aren't triggered like the appended scriptNode. I didn't have this problem with the code I have in the description. – giokokos Mar 22 '13 at 17:21
  • if you say the scripts arent running on the page when it loads, you need to be looking at the browser console to see if there are any client-side js errors – Adam Coulombe Mar 22 '13 at 17:24
  • You are right I forgot to configure again express.static server. Thanks again for the help! – giokokos Mar 22 '13 at 17:27