AWS Elastic Beanstalk não carrega arquivos estáticos da pasta pública para o aplicativo nodejs

AWS Elastic Beanstalk não carrega arquivos estáticos da pasta pública para o aplicativo nodejs

arquivos estáticos.config(NodejsPlayGround\.elasticbeanstalk\staticfiles.config) arquivo

option_settings:
aws:elasticbeanstalk:container:nodejs:staticfiles:
/public: public

índice.hbs(NodejsPlayGround\views\index.hbs) arquivo

<!DOCTYPE html>
<html>
<head>
<title>NodeSeverTest</title>
<script src="js/client.js"></script>
</head>
<body>
<h1>Hello</h1>
</body>
</html>

servidor.js(NodejsPlayGround\server.js) arquivo

'use strict';
const express = require('express');
const path = require('path');

const app = express();
const port = process.env.PORT || 3000;

const views_path = path.join(__dirname, 'views');
const static_path = path.join(__dirname, 'public')

app.set('view engine', 'hbs');
app.set('views', views_path);

app.get('', (req, res) => {
res.render('index', {
title: 'Weather App',
name: 'ArunKumar Arjunan'
}
);
});
app.listen(port, () => {
console.log('server started on port ' + port);
});

cliente.js(NodejsPlayGround\public\js\client.js):

console.log('client side java script file is loaded');

Agora, quando eu implanto isso com eb deploy, client.js não está sendo carregado e retornando o erro 404 (Falha ao carregar o recurso: o servidor respondeu com um status de 404 (Não encontrado) em index.hbs.

Eu tentei todos os passos na internet e perdi dois dias para isso.

Alguém pode me ajudar aqui? Isso é um bug ou estou fazendo algo errado aqui?

Responder1

Acho que, ao contrário da documentação da AWS sobre isso, o caminho da pasta também precisa de uma barra inicial - ou seja, você mapeia /publicpara /public(não apenas public) ou /staticpara /static(não apenas static).

Eu descobri isso inspecionando o log de erros do nginx e os arquivos conf em minhas instâncias EB, e ambos mostraram que ele estava procurando meus arquivos estáticos em /var/app/currentstaticvez de /var/app/current/static.

informação relacionada