const express = require('express');
const path = require('path');
const app = express();
// статика
app.use(express.static('public'));
// API-роуты
app.post('/api/login', (req, res) => { /* ... */ });
app.get('/api/data', (req, res) => { /* ... */ });
// Все остальные GET-запросы → index.html
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'public', 'index.html'));
});
app.listen(3000, () => console.log('Server running on port 3000'));
#
const routes = {
home: () => '<h1>Главная страница</h1>',
about: () => '<h1>О нас</h1>',
contact: () => '<h1>Контакты</h1>',
404: () => '<h1>Страница не найдена</h1>'
};
function handleHashChange() {
const hash = window.location.hash.slice(1) || 'home';
const routeHandler = routes[hash] || routes['404'];
document.getElementById('content').innerHTML = routeHandler();
}
window.addEventListener('hashchange', handleHashChange);
window.addEventListener('load', handleHashChange);
/
, будет меняться только хэш на небольшой форме работает, но на достаточно большой форме уже проблемы
const data = (shallow ? shallowRef : deepRef)(typeof defaults === 'function' ? defaults() : defaults) as RemovableRef<T>
...
if (!storage)
return data
skipHydrate
ваше состояние не сойдется, на клиенте запишется состояние, пришедшее с сервера, игнорируя значение из localStorage.skipHydrate
с сервера будет всегда приходить initialValue и затирать все, что лежит в localStorage createInjectionState
. <script setup lang="ts">
async function getPosts() {
const total = useState<string | null>('total', () => null);
const { data } = await useFetch(
'https://jsonplaceholder.typicode.com/todos/1',
{
onResponse({ response }) {
total.value = response.headers.get('Content-Type');
},
}
);
console.log(total.value);
}
getPosts();
</script>
Content-Type: multipart/form-data
. Для этого нужно файлы собрать в объект FormData, а затем оправить через fetch, либо XMLHttpRequest. При таком решении прогресс получится отслеживать только на XMLHttpRequest.function* makeChunks(data: Blob, chunkSize: number) {
let offset = 0;
chunkSize = Math.max(Math.min(chunkSize, data.size), 1);
while (offset < data.size) {
const chunkIndex = offset / chunkSize;
const nextOffset = Math.min(offset + chunkSize, data.size);
const chunk = data.slice(offset, nextOffset);
yield {
start: offset,
end: nextOffset,
total: data.size,
index: chunkIndex,
payload: chunk,
}
offset += chunkSize;
}
}