当前位置: 首页 > 面试题库 >

Node.js-外部JS和CSS文件(仅使用node.js不表达)

许焕
2023-03-14
问题内容

我试图学习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来实现相同的目标。

我对此表示感谢。

提前致谢。


问题答案:

您的代码有几个问题。

  1. 您的服务器没有指定要监听的端口,将无法运行。
  2. 正如Eric指出的那样,您的案例条件将失败,因为URL中未显示“ public”。
  3. 您在js和CSS响应中引用的变量“ content”不存在,应该是“ data”。
  4. 您的CSS内容类型标头应为text / css而不是text / javascript
  5. 无需在主体中指定“ utf8”。

我已经重新编写了您的代码。注意我不使用大小写/开关。如果不是这样,我宁愿简单得多,如果您愿意,可以将它们放回去。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服务器请求的响应发送回去。因为您从未发送任何对原始请