为什么Express通过路由器提供静态文件,但是打破了脚本文件夹的路径?

时间:2017-03-24 18:10:16

标签: javascript node.js express routing

文件夹结构

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数据库中提取数据并将其输出到单个页面上,并使用一些脚本来操作它数据。不需要多个页面或视图。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

您真正想要做的是,在完成所有手动路由后,将以下行放在app.js中:

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