无法在Express中访问serve-index列出的文件

时间:2017-08-22 04:23:43

标签: javascript node.js express server

我使用Express:

为Node.js编写了以下非常简单的服务器
'use strict';

 const express = require('express');
 const serveIndex = require('serve-index');

 express()
   .use(serveIndex(__dirname + '/public'))
   .listen(1024);

虽然这确实显示了目录的内容,但当我点击列出的任何文件时,我会收到Cannot GET /example.png行的错误消息。出了什么问题?

2 个答案:

答案 0 :(得分:1)

我打开了一个错误,他们最终修复了文档:

https://github.com/expressjs/serve-index/blob/master/README.md

tl; dr版本:

var express    = require('express')
var serveIndex = require('serve-index')

var app = express()

// Serve URLs like /ftp/thing as public/ftp/thing
// The express.static serves the file contents
// The serveIndex is this module serving the directory
app.use('/ftp', express.static('public/ftp'), serveIndex('public/ftp', {'icons': true}))

// Listen
app.listen(3000)

您必须先安装express.static中间件。

答案 1 :(得分:0)

我遇到了同样的问题。当我单击某个文件时,它会返回Cannot get错误。当我点击文件夹时,它工作正常,所以我想出了这个解决方案。

var express    = require('express');
var serveIndex = require('serve-index');

var app = express();

app.use('/', serveIndex('public/', {'icons': true}));

app.get('/', function(req, res, next){

})
app.get('/text.txt', function(req, res){
  res.sendFile(__dirname + "/public/text.txt");
})

app.listen(1024);

该程序将找到位于./public/目录中的文件和文件夹,并将其作为回复发送。当我点击./public目录中的响应中的文件时,程序运行app.get('filename', ..)功能。由于我们下面没有此代码,因此返回Cannot get错误。

以下是解决方案,您将检查客户端get是否为该链接,如果他/她这样做,我们会将文件作为响应发送。这里只需要更多的编码。

app.get('/text.txt', function(req, res){  //text.txt is the file name here
  res.sendFile(__dirname + "/public/text.txt");
})