我试图学习node.js并遇到了一些障碍。
我的问题是我似乎无法将外部CSS和JS文件加载到html文件中。
GET http://localhost:8080/css/style.css 404 (Not Found)
GET http://localhost:8080/js/script.css 404 (Not Found)
(这是当所有文件都在应用程序的根目录中时)
有人告诉我要模仿以下应用程序结构,为公共目录添加一条路由,以允许Web服务器为外部文件提供服务。
我的应用程序结构是这样的
domain.com
app/
webserver.js
public/
chatclient.html
js/
script.js
css/
style.css
因此,我的webserver.js脚本位于应用程序的根目录中,而我想访问的所有内容均位于“ public”中。
我还看到了使用path.extname()获取路径中所有文件扩展名的示例。(请参阅最后一个代码块)。
因此,我尝试将新的网站结构与这个path.extname()示例结合在一起,以使网络服务器允许访问我的公共目录中的任何文件,因此我可以呈现引用外部js和css文件的html文件。
。
我的webserver.js看起来像这样。
var http = require('http')
, url = require('url')
, fs = require('fs')
, path = require('path')
, server;
server = http.createServer(function(req,res){
var myPath = url.parse(req.url).pathname;
switch(myPath){
case '/public':
// get the extensions of the files inside this dir (.html, .js, .css)
var extname = mypath.extname(path);
switch (extname) {
// get the html
case '.html':
fs.readFile(__dirname + '/public/chatclient.html', function (err, data) {
if (err) return send404(res);
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data, 'utf8');
res.end();
});
break;
// get the script that /public/chatclient.html references
case '.js':
fs.readFile(__dirname + '/public/js/script.js', function (err, data) {
if (err) return send404(res);
res.writeHead(200, { 'Content-Type': 'text/javascript' });
res.end(content, 'utf-8');
res.end();
});
break;
// get the styles that /public/chatclient.html references
case '.css':
fs.readFile(__dirname + '/public/css/style.css', function (err, data) {
if (err) return send404(res);
res.writeHead(200, { 'Content-Type': 'text/javascript' });
res.end(content, 'utf-8');
res.end();
});
}
break;
default: send404(res);
}
});
在public的情况下,我试图通过var extname =
mypath.extname(path);来获取此目录中的任何文件夹/文件。与我提供的链接类似。
但是目前,当我控制台登录时,“ extname”为空。
有人可以在这里建议我可能需要补充的内容吗?我知道这可以在Express中轻松完成,但是我想知道如何仅依靠Node来实现相同的目标。
我对此表示感谢。
提前致谢。
您的代码有几个问题。
我已经重新编写了您的代码。注意我不使用大小写/开关。如果不是这样,我宁愿简单得多,如果您愿意,可以将它们放回去。url和path模块在我的重写中不是必需的,因此已将其删除。
var http = require('http'),
fs = require('fs');
http.createServer(function (req, res) {
if(req.url.indexOf('.html') != -1){ //req.url has the pathname, check if it conatins '.html'
fs.readFile(__dirname + '/public/chatclient.html', function (err, data) {
if (err) console.log(err);
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data);
res.end();
});
}
if(req.url.indexOf('.js') != -1){ //req.url has the pathname, check if it conatins '.js'
fs.readFile(__dirname + '/public/js/script.js', function (err, data) {
if (err) console.log(err);
res.writeHead(200, {'Content-Type': 'text/javascript'});
res.write(data);
res.end();
});
}
if(req.url.indexOf('.css') != -1){ //req.url has the pathname, check if it conatins '.css'
fs.readFile(__dirname + '/public/css/style.css', function (err, data) {
if (err) console.log(err);
res.writeHead(200, {'Content-Type': 'text/css'});
res.write(data);
res.end();
});
}
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
问题内容: 在Express项目中包括CSS和JS文件的正确方法是什么? 我正在使用ejs模板引擎。我已经看到一个使用connect-assetmanager的示例,但是很难遵循。 一个小的示例项目在index.ejs(不是layout.ejs)中包含css和js会非常有用。 问题答案: 静态文件可以与express的静态中间件一起使用。我通常为从根目录提供所有静态文件的目录。 如果已使用npm(
问题内容: 我有以下两个javascript函数: 1 2 我想将它们放在外部“ .js”文件中 1 2 调用这些函数的正确语法是什么? 问题答案: 像这样的代码 希望对您有帮助。…谢谢
问题内容: 在node.js中执行简单类型的命令是否容易/可行? 我要做的就是访问局部变量并运行脚本。人们通常如何组织比简单的hello世界更大的node.js项目?(功能齐全的动态网站) 例如,我想拥有以下目录: …等等 问题答案: 只是做一个 将您希望外部访问的所有变量声明为全局变量。所以代替 这将是 要不就 这显然是不好的。您不想污染全局范围。相反,建议方法是针对您的函数/变量。 如果您想要
问题内容: 我有一个看起来像这样的文本文件: 我想使用node.js将每行的开头替换为“ myString”。因此,每个最终看起来像: 我正在尝试使用正则表达式,但是我怀疑可以使用读取和写入流来完成。 哪种正则表达式将起作用,或者使用node编辑此文件的最佳方法是什么? 问题答案: 根据您的需要,这是“同步”或“异步”的两个选项。
问题内容: 在哪种情况下,应该只在实际部署中将Node.js用作服务器? 当一个人 不 希望只使用Node.js的,有什么用Node.js的发挥更好?Apache还是Nginx? 问题答案: 将另一个Web服务器放在Node.js前面有几个充分的理由: 不必担心Node.js进程的特权/ setuid。通常只有root可以绑定到端口80。如果让nginx / Apache担心以root身份启动,绑
问题内容: 我有一条路线如下: 我正在尝试对Giant Bomb API进行API调用,以获取有关魔兽世界的所有数据。 问题是,路线刚刚加载;它什么也没做,也没有超时,只是连续加载。 我不知道我在做什么错,但是话虽这么说……我也不知道什么是对的。我在努力学习。 任何帮助都会很棒。 谢谢 问题答案: 您需要获取从中获取的数据,并将其作为对原始Web服务器请求的响应发送回去。因为您从未发送任何对原始请