У вас вот тут интересная строка:
let token = await fetch("http://site/admin/", {method:'get'}).then(data=>data.json())
Одновременно и await и .then();
Вот как я сделал:
Клиент:
function get_csurf_token(){
return new Promise(async (resolve, reject) => {
let response = await fetch('/get_csurf_token', {
method:'get',
headers: {
'Accept': 'application/json',
},
});
if(response.status == 200){
let obj = await response.json();
console.log(obj)
resolve(obj.token);
}
});
}
form_add.addEventListener('submit', async function(event){
event.preventDefault();
let csurf_token = await get_csurf_token();
let response = await fetch(form_add.getAttribute('action'), {
method: form_add.getAttribute('method'),
headers: {
'Content-type': 'application/json',
'Accept': 'application/json',
'X-Csrf-Token': csurf_token,
},
body: JSON.stringify({
first_name: form_add.first_name.value,
last_name: form_add.last_name.value
})
});
console.log(response)
if(response.status == 200){
let user = await response.json();
output.innerHTML = 'В базу данных добавлен новый пользователь: <b>' + user.first_name + ' ' + user.last_name + '</b><br>';
}
else{
output.innerHTML = 'Произошла ошибка!<br>' + response.status + ' ' + response.statusText;
}
});
Сервер:
app.use(csurf());
app.get('/get_csurf_token', async function(req, res){
let token = req.csrfToken();
console.log(token); // Получим строку вида: xmRBPXdh-s8TAuC5xwUt80ocW6hiim9Ow690
res.send({ token });
});