我们可以在服务器的节点模块中提供静态文件吗?

Pie*_*sle 4 javascript node.js express node-modules

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

app.use(express.static(Path.join(__dirname, '..', 'public')));
Run Code Online (Sandbox Code Playgroud)

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

app.use(express.static(Path.join(__dirname, '..', 'node_modules/fuelsdk-node')));
Run Code Online (Sandbox Code Playgroud)

我的目录设置如下:在此处输入图片说明

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

小智 10

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

app.use("link", "physical address");
Run Code Online (Sandbox Code Playgroud)

在您的情况下,它将类似于:

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

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


为了更好地理解,请参阅 node_modules 中的使用引导程序示例

npm install jquery
npm install bootstrap
Run Code Online (Sandbox Code Playgroud)

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');
Run Code Online (Sandbox Code Playgroud)

公共/index.html

app.use("link", "physical address");
Run Code Online (Sandbox Code Playgroud)