【问题标题】:Can we serve static files in a node module for a server?我们可以在节点模块中为服务器提供静态文件吗?
【发布时间】:2018-11-27 12:33:49
【问题描述】:

如果这个问题看起来很愚蠢,我很抱歉,但我正在开发 NodeJs 服务器,我目前正在使用它(在后端/server.js 中)来保存我的公共文件:

app.use(express.static(Path.join(__dirname, '..', 'public')));

但我想知道是否可以在我的路径中添加一个节点模块包,例如:

app.use(express.static(Path.join(__dirname, '..', 'node_modules/fuelsdk-node')));

我的目录是这样设置的:

我应该如何导入我的节点模块? 我可以同时使用两者吗?还是我必须以其他方式做到这一点?谢谢!

【问题讨论】:

  • 如果你想在node_modules/fuelsdk-node 中提供文件,这基本上很好。我只是想知道这样做的目的是什么。是的,您可以同时使用两者。
  • 根据经验,类似于“此代码是否有效”的问题非常糟糕。取而代之的是尝试一下,然后进行一些调试,然后按照“我编写了这段代码,我希望 X 发生,但 Y 发生了。我做了 A 来调试它,然后我找到 B。我不明白 C。”。

标签: javascript node.js express node-modules


【解决方案1】:

不建议直接从 node_modules 文件夹中调用静态文件。相反,一个好的做法是使用重定向。想法是有一个链接,该链接将从 node_modules 文件夹中调用静态资源。

app.use("link", "physical address");

在你的情况下,它会是这样的:

app.use("/", express.static(Path.join(__dirname, '..', 'public')));
app.use("/fuelsdk-node", express.static(Path.join(__dirname, '..', 'node_modules/fuelsdk-node')));

现在您可以通过与链接相关的方式调用您的静态文件。


为了更好地理解,请查看 node_modules 的使用引导示例

npm install jquery
npm install bootstrap

server.js 文件

// grab express
var express = require("express");

// create an express app
var app = express();

// CONFIGURE THE APP
// ==================================================
// tell node where to look for site resources
app.use('/', express.static(__dirname + '/public'));
app.use('/css', express.static(__dirname + '/node_modules/bootstrap/dist/css')); // redirect CSS bootstrap
app.use('/js',  express.static(__dirname + '/node_modules/bootstrap/dist/js')); // redirect JS bootstrap
app.use('/jquery',  express.static(__dirname + '/node_modules/jquery/dist')); // redirect JS jquery
// create an express route for a homepage
// http://localhost:8080/
app.get('/', function(req, res){
    res.sendfile('/index.html');
});

app.listen(8080);
console.log('Server has started');

公开/index.html

<!DOCTYPE html>
<html>

<head>
  <title>Static Files</title>
  <link rel='stylesheet' href='/css/bootstrap.min.css' />
  <script type="text/javascript" src="/jquery/jquery.min.js"></script>
  <script type="text/javascript" src="/js/bootstrap.min.js"></script>
</head>

<body>

  <div class="alert alert-warning alert-dismissible fade show" role="alert">
    <strong>It works</strong> Static files from node_modules. css & javascript are connected by redirected link
    <button type="button" class="close" data-dismiss="alert" aria-label="Close">
        <span aria-hidden="true">&times;</span>
      </button>
  </div>
  <script type="text/javascript">
    $('.alert').alert();
  </script>

</body>

</html>

【讨论】:

  • 感谢您的回答! :)
  • 我知道这是一个很老的答案,但我想知道间接而不是直接链接它的理由是什么?我知道我们正在尝试将所有内容都放在公共文件夹中,但这与我们只是从 node_modules 文件夹中获取它不同吗?另外,如何将其扩展到来自不同文件夹的多个 CSS 文件?
猜你喜欢
  • 2016-08-08
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 2021-04-13
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多