У меня есть некоторый код, написанный кем-то другим, это функция jquery, которая принимает динамически отображаемый список, и при нажатии кнопки предполагается передать объект в коллекцию Монго через экспресс.
Функциональность работает локально, и она сработала у меня после того, как я толкнул геройку. Однако коллега не смог заставить работать кнопку, используя Google Chrome или Safari, страница просто обновилась, и объект не был добавлен. Я полагаю, что я воссоздал проблему, но только в краю MS.
Это функция jquery:
function OnAddProxyClick() {
let proxies = [];
const checkboxes = $('.proxy-input:checked');
for (const checkbox of checkboxes) {
proxies.push({
proxyTitle: checkbox.getAttribute('data-title'),
proxyValue: checkbox.getAttribute('data-value'),
proxyUnit: checkbox.getAttribute('data-unit')
});
}
//fetch returns a promise, handle it with .then and check the response to do error handling
//otherwise if all goes well we should redirect
const url = window.location.pathname + '/proxies';
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
redirect: 'follow',
body: JSON.stringify({ proxies: proxies })
}).then(res => {
if (res.ok) {
location.reload();
} else {
//show an error here if adding proxy doesn't work
console.log('The proxy wasnt added')
}
});
}
Если я удаляю location.reload и оставляю страницу висеть, правильный объект может быть console.logged, но не добавлен в коллекцию.
Это экспресс-код:
router.post("/:id/proxies", async (req, res) => {
let newProxies = [];
for (const proxy of req.body.proxies) {
newProxies.push({
proxyTitle: proxy.proxyTitle,
proxyValue: proxy.proxyValue,
proxyUnit: proxy.proxyUnit,
});
}
// Add every new proxy to the project proxies array
const query = { _id: req.params.id };
const update = { $addToSet: { proxies: { $each: newProxies } } };
const project = await Project.findById(query);
//make sure we don't add a duplicate
for (const newProxy of newProxies) {
let shouldPush = true;
for (const proxy of project.proxies) {
if (
proxy.proxyTitle == newProxy.proxyTitle &&
proxy.proxyValue == newProxy.proxyValue &&
proxy.proxyUnit == newProxy.proxyUnit
) {
shouldPush = false;
break;
}
}
if (shouldPush) {
// have tried awaiting this
project.proxies.push(newProxy);
}
}
await project.save();
res.end();
}
);
Кажется, здесь есть переменная update для проверки того, существует ли объект в коллекции, но не используется ли он (я пробовал использовать его, но это не помогло), и я попытался использовать await в проекте. proxies.push, и это тоже не сработало. Единственная ошибка, которую я могу найти в инструментах Edge, это что-то из-за непревзойденного тега, но это не объясняет, почему он работает для меня в Chrome, а не для моего коллеги.
Как мне убедиться, что объект действительно был добавлен в коллекцию до перезагрузки страницы?