#javascript #node.js #heroku #cors
Вопрос:
Я использую Node JS Express для бэкенда и обычный HTML для интерфейса. По нажатию кнопки я пытаюсь отправить данные формы в MongoDB через узел JS.
Клиент [HTML]
<a href="javascript:void(0);" onclick="sendData();" id="get-marker-value" class="btn pxp-hero-contact-form-btn">Get Market Value</a>
<script type="text/javascript">
function sendData(event){
let name = document.getElementById("name").value;
let email = document.getElementById("email").value;
let phone = document.getElementById("phone").value;
let address = document.getElementById("address").value;
if(name != '' || email != '' || phone != '' || address != ''){
let formData = JSON.stringify({
name: name,
phone: phone,
email: email,
address: address
});
let url="<SERVER_URL>/listing/add_listing";
fetch(url, {
method: 'post',
body: formData,
headers:{"Content-Type" : "application/json"}
}).then(response => response.json())
.then( (result) => {
console.log('success:', result);
$('#get-marker-value').addClass('hide');
$('#get-marker-value-success').addClass('show');
})
.catch(error => console.log('error:', error));
}
else{
}
}
</script>
На стороне сервера,
var listingRouter = require('./routes/listing');
app.use('/listing', listingRouter);
app.use((req, res, next) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader(
"Access-Control-Allow-Methods",
"OPTIONS, GET, POST, PUT, PATCH, DELETE" // what matters here is that OPTIONS is present
);
res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
next();
});
app.listen(port, () => {
console.log(`App listening at http://localhost:${port}`)
})
Маршруты — Список
router.post('/add_listing', function(req, res) {
console.log("Post Request");
console.log(req.body);
const name = req.body.name;
const phone = req.body.phone;
const email = req.body.email;
const address = req.body.address;
const date = new Date();
const newListing = new Listing({
name,
phone,
email,
address,
date,
});
newListing.save()
.then(() => res.json('Listing added!'))
.catch(err => res.status(400).json('Error: ' err));
});
Код отлично работает на местном языке, но возникли проблемы в Heroku.
Ответ №1:
URL-адрес на стороне клиента, указывающий на локальный хост, который вам нужен, чтобы указать на ваш сервер heroku
let url="http://localhost:3000/listing/add_listing";
также ознакомьтесь с руководствами по использованию heroku
. вам также необходимо убедиться, что ваша база данных подключена к серверу heroku
. Здесь вы можете получить дополнительную информацию о том, как развернуть heroku:
https://devcenter.heroku.com/articles/getting-started-with-nodejs#deploy-the-app