使用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.use
和server.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);