Node/Express发送静态文件请求

6

我是一个初学者,正在尝试理解node/express如何发送静态文件。我成功地服务了我的index文件,但我无法将其他文件作为GET请求的响应进行服务。

app.use(express.static(path.join(__dirname, '/client/build')))

app.get('/', (req, res) => {
  res.sendFile(path.resolve(__dirname, '.', 'client/build/', 'index.html'))
  res.end()
})

app.get('/portfolio', (req, res) => {
  const person = req.query.name
  var filePath = __dirname + '/client/build/' + person + '/' + 'index.html'
  res.sendFile(filePath)
  res.end()
})

我找到了类似的问题,但没有任何方法能解决。

我发送的请求是:

fetch(`portfolio?name=${who}`)

1
你向服务器发送什么请求? - alexmac
“person”是什么,你向服务器发送了什么请求?@alexmac - Ahmed Can Unbay
我编辑了问题,请求是 fetch(`portfolio?name=${who}`)这里的'who'是投资组合所有者的姓名(字符串)。 - Braian
2个回答

5

你的代码存在一些问题。其中一个问题是在文件发送完毕之前就结束了请求,另一个问题是你没有正确使用 res.sendFile 方法。

尝试像这样做:

app.get('/', (req, res) => {
  const fileDirectory = path.resolve(__dirname, '.', 'client/build/');

  res.sendFile('index.html', {root: fileDirectory}, (err) => {
    res.end();

    if (err) throw(err);
  });
})

app.get('/portfolio', (req, res) => {
  const person = req.query.name
  const fileDirectory = __dirname + '/client/build/' + person + '/';

  res.sendFile('index.html', {root: fileDirectory}, (err) => {
    res.end();

    if (err) throw(err);
  });
})

我不建议在遇到错误时立即抛出错误,但至少它应该让您知道如何让这个工作。

我尝试了但是没成功。有人指出,第一个请求处理器('/')是不必要的,因为express.static映射了路由。但是第二个仍然不起作用,如果我加入console.log,它确实会记录一些内容,所以请求正在被处理,但它不会执行任何操作也不会抛出错误。 - Braian

1

我最终通过在服务器上使用这个来解决它:

app.use( express.static(path.join(__dirname, 'client/build/person1')))
app.use( express.static(path.join(__dirname, 'client/build/person2')))

在视图中像这样调用它:
<a href='/person1'></a>
<a href='/person2'></a>

据看来,express.static 会自行解析路径,因此您不需要自己处理请求以提供静态文件。
如果这不是一个好的解决方案,请评论。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接