【问题标题】:Why does Express serve the static file through router, but breaks path to scripts folder?为什么 Express 通过路由器提供静态文件,但会破坏脚本文件夹的路径?
【发布时间】:2017-03-24 18:10:16
【问题描述】:

文件夹结构

app
├── app.js
├── public
│   ├── data
│   │   └── data.json
│   ├── index.html
│   └── js
│       ├── filter-list.js
└── routes
    └── index.js

app.js 正确需要 index.js 路由器

var express = require('express');
var app = express();

app.set('port', process.env.PORT || 3000);
app.use(require('./routes/index'));

var server = app.listen(app.get('port'), function() {
console.log('Listening on port ' + app.get('port'));
});

routes/index.js 找到文件并提供它

var express = require('express');
var router = express.Router();

router.get('/', function(req, res) {

    res.sendFile('/Users/Michael/Desktop/js-list-filter/app/public/');
});

module.exports = router;

public/index.html 指的是 filter-list.js

<script type="text/javascript" src="js/filter-list.js"></script>

问题: 路由器正确地提供了 index.html 文件,但是脚本文件的路径被破坏并不断输出 404 错误。

我使用 res.sendFile() 路由它的原因是因为这只是一个测试项目,用于练习从 MySQL 数据库中提取数据并将其输出到单个页面上,并使用一些脚本来操作该数据。不需要多个页面或视图。

【问题讨论】:

  • 你试过直接在浏览器中加载那个js文件吗?

标签: javascript node.js express routing


【解决方案1】:

您应该在app.js 文件中添加app.use('/', express.static('public')); 以将公共文件夹设置为静态客户端资产的来源。

【讨论】:

  • 我一开始就是这样运行的,它确实有效。问题在于(我认为)无法连接到数据库,运行查询并将其直接输出到 HTML 中。我假设路由它,然后在路由器中运行数据库连接,执行查询然后通过路由器发送它是要走的路。
  • 只需将执行查询的路由放在静态文件夹的路由之前。路由按顺序解析并执行与给定 url 模式匹配的第一个路由。
  • 您可能对提供数据的方法感到困惑。您可以这样做:在服务器端呈现 html,或者在前端使用 Javascript 解析数据。
【解决方案2】:

这是提供静态文件的一种非常奇怪的方式。你在哪里看到的?

但要回答您的问题,您的应用程序仅提供根路径。我只能想象res.sendFile() 正在扫描您的/public 目录以查找以index 开头的任何内容,因此它将呈现您的index.html

你真正想要做的,是在你的 app.js 中加入下面这行,一旦所有的手动路由都完成了:

app.use(express.static(path.resolve(__dirname, './public')));

【讨论】:

  • “我一开始就是这样运行的,它确实有效。问题是(我认为)无法连接到数据库,运行查询并直接输出到HTML。我假设路由它,然后在路由器中运行数据库连接,执行查询然后通过路由器发送它是要走的路。“如果这是一种奇怪的方式,你能指出我的正确吗实现方向:捕获db数据,查询然后输出到DOM,同时仍然使用静态方法?
  • 这可能不被视为静态文件,因为您希望根据来自数据库的数据填充文档,这通常是动态的。请查看 Expressjs 的文档。考虑查看引擎和res.render()
  • 我有一种感觉,就是这样......如果我能侥幸逃脱的话,这次只是想避免使用视图引擎。谢谢!
猜你喜欢
  • 2017-07-27
  • 2019-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-30
  • 2018-10-24
  • 2019-06-14
  • 2018-05-22
相关资源
最近更新 更多