Мое приложение разработано с использованием Vue и Express. В моем приложении есть ошибка, которая возникает только в Heroku или производственной среде, но не в localhost или в среде разработки.
Мое приложение включено
Heroku: https://immense-refuge-12167.herokuapp.com/
github: https://github.com/powerseed/tabtracker_production
Если вы нажмете ссылку "Браузер" вверху -в левом углу, объект с именем «response» будет напечатан на консоли, как показано ниже: Это ответ, возвращенный из бэкэнда, и его атрибут data
должен содержать song
объекты, возвращаемые из базы данных PostgresSQL.
Однако его атрибут data
содержит вместо этого код HTML
, содержимое которого:
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<meta name=viewport content="width=device-width,initial-scale=1">
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900" rel=stylesheet>
<title>TabTracker</title>
<link href=/static/css/app.a56f85525b4e670fc7da4a6aaae97f55.css rel=stylesheet>
</head>
<body>
<div id=app></div>
<script type=text/javascript src=/static/js/manifest.2ae2e69a05c33dfc65f8.js></script>
<script type=text/javascript src=/static/js/vendor.eb5d49c013eada509bc8.js></script>
<script type=text/javascript src=/static/js/app.913b2b7edc7aedfb34fe.js></script></body></html>
Мне интересно, почему ... Эта ошибка не возникает на локальном хосте. На локальном хосте вывод такой, как показано ниже, и это правильно.
Вот мой код в клиенте, который отправляет запрос get
на сервер для получения song
объектов.
.
.
.
async mounted() {
const response = (await api.getSongs(this.search))
this.songs = response.data;
console.log({response})
console.log(this.songs)
И метод api.getSongs()
это:
(пожалуйста, игнорируйте параметр this.search
, он игнорируется для тестирования)
const URL = "";
getSongs(search){
return axios.get(URL + "songs", {
params:{
search: search
}
});
},
И в beckend метод, который обрабатывает запрос get
и получает из БД:
app.get("/songs", async function (req, res) {
try{
let allSongs = await Song.findAll({
limit: 10
})
res.send(allSongs);
}
catch (e) {
res.status(500).send({
error: 'An error occurred when getting all songs. '
})
}
})
Это странно, так как отлично работает на localhost, но в Heroku эта ошибка возникает.
Я думаю, что БД подключена правильно, потому что функции реестра и входа работают нормально.
Вы можете войти в систему только после регистрации. И они оба post
запрос. Итак, я думаю, что проблема только в get
?
Кроме того, вот моя proxy
конфигурация: client/config/index.js
module.exports = {
dev: {
// Paths
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {
'/': {
target: 'http://localhost:8081',
}
},
Заранее спасибо!
Обновлено:
Я пытался добавить headers: {Accept: 'application/json'}
и headers: {'Content-Type': 'application/json'}
, но ответ всегда text/html
, что отличается от моего локального хоста, где всегда application/json
, даже если я не добавил 'Content-Type': 'application/json'