Я отправляю сетевой запрос POST от функции javascript на сервер node.js. Я получаю этот ответ об ошибке на внешнем интерфейсе:
Доступ к выборке в 'https://server.herokuapp.com/connect/link' из источника 'http://localhost: 8888 ' был заблокирован политикой CORS: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Если непрозрачный ответ удовлетворяет вашим потребностям, установите режим запроса 'no-cors', чтобы получить ресурс с отключенным CORS.
javascript, который использует fetch()
, чтобы сделать вызов похожим на этот :
function submitId() {
$("#progress-label").text("Working...")
const request = {
method: "POST",
body: {
docId: $('#id').val(),
stripeId: USER_ID
},
mode: 'cors',
headers: { 'Content-Type': 'application/json'}
}
fetch(SERVER_URL + "/link", request).then(res => {
document.getElementById("label").innerHTML = res.msg
}).catch(err => {
document.getElementById("label").innerHTML = res.msg
})
}
Node.js сервер:
var express = require('express'),
stripeConnect = require('./routes/connect'),
cors = require('cors'),
bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(cors());
app.use(function (req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Credentials', 'true');
next();
});
app.use('/connect', connect);
app.listen(process.env.PORT || 5000);
маршруты / соединения. js выглядит так:
const express = require('express');
const router = express.Router();
const admin = require('firebase-admin');
admin.initializeApp({
credential: admin.credential.cert({
projectId: process.env.projectId,
clientEmail: process.env.clientEmail,
privateKey: process.env.privateKey.replace(/\\n/g, '\n'),
clientId: process.env.clientId
}),
databaseURL: process.env.databaseURL
});
const STRIPE_SK = 'sk_test_KEY';
const stripe = require('stripe')(STRIPE_SK);
// @route POST /stripeConnect/link
// @desc save stripe user account id to their firebase profile
// @access public
router.post('/link', (req, res) => {
console.log('\nSTRIPE-LINK-REQUEST-BODY => ');
console.log(req.body);
return admin
.firestore()
.collection('users')
.doc(req.body.docId)
.update({ stripeId: req.body.stripeId })
.then((success) => res.json({ msg: 'Stripe account ID added to profile.' }))
.catch((err) => res.json({ msg }));
});
module.exports = router;
ошибка, полученная на стороне сервера is:
SyntaxError: Неожиданный токен o в JSON в позиции 1 2020-03-13T00: 10: 29.151249 + 00: 00 app [web.1]: в JSON .parse ( ) 2020-03-13T00: 10: 29.151251 + 00: 00 приложение [web.1]: при разборе (/app/node_modules/body-parser/lib/types/json.js:89:19) 2020 -03-13T00: 10: 29.151251 + 00: 00 приложение [web.1]: в /app/node_modules/body-parser/lib/read.js:121:18 2020-03-13T00: 10: 29.151251+ Приложение 00:00 [web.1]: at invokeCallback (/app/node_modules/raw-body/index.js:224:16) 2020-03-13T00: 10: 29.151251 + 00: 00 приложение [web.1 ]: на готово (/app/node_modules/raw-body/index.js:213:7) 2020-03-13T00: 10: 29.151252 + 00: 00 приложение [web.1]: на IncomingMessage.onEnd (/ приложение / node_modules / сырым-бо dy / index. js: 273: 7) 2020-03-13T00: 10: 29.151253 + 00: 00 app [web.1]: at IncomingMessage.emit (events. js: 323: 22) 2020-03 -13T00: 10: 29.151253 + приложение 00: 00 [web.1]: at endReadableNT (_stream_readable. js: 1204: 12) 2020-03-13T00: 10: 29.151253 + 00: 00 приложение [web.1]: at processTicksAndRejected (внутренняя / process / task_queues. js: 84: 21)
Как это исправить, чтобы успешно отправить запрос на публикацию?