使用nodejs webserver在dynamic创build的html页面中执行javascript文件

我想用一个node.js webserver在一个dynamic创build的html页面的头部执行javascript文件。 不知道如何,但一定是可能的。

var http = require('http'); var url = require('url'); function processRequest(request, response) { "use strict"; var pathname = url.parse(request.url).pathname; console.log('Requested ' + pathname); response.writeHead(1000, { 'Content-Type': 'text/html' }); response.write('<!DOCTYPE html><html ><head>'); response.write('<meta charset="utf-8">'); response.write('<title>' + 'Yay Node!' + '</title>'); response.write('<link rel=stylesheet href=../styles/styles.css rel=stylesheet />'); response.write('<script src=script.js type=text/javascript></script>'); response.write('</head><body>'); response.write('<h1><tt>' + 'jan' + '</tt></h1>'); response.write('<script type="text/javascript">test()</script>') //response.write('<script type="text/javascript">script.onload = function () { alert("from html Node!")}; </script>') response.write('<input id="clickMe" type="button" value="clickme" onclick="test()" />') response.write('</body></html>'); response.end(); }; http.createServer(processRequest).listen(8888); 

的script.js:

 document.onload = function () { alert('load Node!'); }; test = function() { alert('test Node!') }; 

问题是,你的浏览器找不到script.js

当它试图得到http://localhost:8888/script.js节点的答案是一个与http://localhost:8888/相同的html文件。

为了使节点正确地提供脚本文件,您需要检查path并发送正确的文件。

把这样的东西添加到你的processRequest函数中

 if (pathname === '/script.js') { //code to send script } else { //code to send html } 

你也必须为styles.css文件做同样的事情

如果你不想硬编码你的页面中的每个文件,我会推荐使用npm模块express

 var express = require('express'), app = express(), server = require('http').createServer(app); app.use('/', express.static(__dirname + '/static'); server.listen(8888); 

当浏览器请求这些代码时,这些代码将自动发送/static文件。 如果你想创build一个dynamic页面,你可以在app.useserver.listen之间添加这个页面

 app.all('/somedynamicurl', function (request, response) { //Dynamic page }); 

现在,如果有人去http://localhost:8888/somedynamicurl他们会得到这个dynamic页面。

我还build议阅读快递指南和快递文档

这工作。 感谢Ferdi265。

  // http://www.cburch.com/cs/340/reading/nodejs/ var http = require('http'); var url = require('url'); var path = require('path'); var fs = require('fs'); var mimeTypes = { '.js': 'text/javascript', '.html': 'text/html', '.css': 'text/css' }; function processRequest(request, response) { "use strict"; var pathname = url.parse(request.url).pathname; console.log('Requested ' + pathname); var lookup = path.basename(decodeURI(request.url)), //|| 'index.html', f = lookup; fs.exists(f, function (exists) { if (exists) { fs.readFile(f, function (err, data) { if (err) { response.writeHead(500); response.end('Server Error!'); return; } var headers = { 'Content-type': mimeTypes[path. extname(lookup)] }; response.writeHead(200, headers); response.end(data); }); // return; } else { response.writeHead(1000, { 'Content-Type': 'text/html' }); response.write('<!DOCTYPE html><html ><head>'); response.write('<meta charset="utf-8">'); response.write('<title>' + 'Yay Node!' + '</title>'); response.write('<link rel=stylesheet href=../styles/styles.css rel=stylesheet />'); response.write('<script src=script.js type=text/javascript></script>'); response.write('</head><body>'); response.write('<h1><tt>' + 'jan' + '</tt></h1>'); response.write('<script type="text/javascript">test()</script>') //response.write('<script type="text/javascript">script.onload = function () { alert("from html Node!")}; </script>') response.write('<input id="clickMe" type="button" value="clickme" onclick="test()" />') response.write('</body></html>'); response.end(); } }); }; http.createServer(processRequest).listen(8888);