在express中将`public`声明为static后,如何从`node_modules`添加静态文件?

时间:2017-06-17 16:34:59

标签: node.js express

在我的express应用中,我保留以下配置:

var express = require("express");
var path = require("path");
var jsonServer = require("json-server");
var app = express( );

app.use(express.static('public'));

app.get("/", function( req, res ) {
    res.sendFile( express.static(  path.join(__dirname, "/public/index.html" ) ) );
});

app.use('/api', jsonServer.router('./db.json'));

app.listen( 3000 );

这一切都很好。问题是,我无法从jquery添加node_modules。这是我的HTML:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Promise Defined</title>
    <script src="node_modules/jquery/dist/jquery.js" type="text/javascript"></script> //not working sibling folder of public
    <link rel="stylesheet" href="styles/app.css"> //works fine. inside public folder
</head>
<body>
    <h1>New Title</h1>
</body>
</html>

解决此问题的正确方法是什么?或者如何处理这种情况? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

node.js默认不提供任何文件(与其他一些Web服务器不同)。因此,如果您希望node_modules/jquery/dist/jquery.js起作用,则必须确保您的express.static()代码行包含该文件,或者您必须专门为该文件定义路由。此外,使用没有前导/的相对路径有时很危险,因为这使得它相对于页面的路径通常是不必要的,并且如果您想要批量提供相同的文件会使事情变得困难您网站上的不同网页。

例如,您可以在网页中执行此操作:

<script src="/jquery.js" type="text/javascript"></script>

而且,这个:

app.get("/jquery.js", function(req, res) {
    res.sendFile(path.join(__dirname, "node_modules/jquery/dist/jquery.js"));
});

就个人而言,我可能会将jquery.js移动到我服务器上的public / scripts目录中,因此我不会在node_modules目录中提供任何内容,因此我所有公开提供的文件都集中在一个地方,所以它完全清楚是什么可以提供给客户端,什么不可以,所以我可以设计一个或两个express.static()语句来提供我的所有公共文件。