ShadowOfCasper
@ShadowOfCasper
Middle User Interface Web Developer

Как отвечать индексом на все get-запросы к browserSync?

Всем привет.
Нужна помощь с обработкой middleware в browserSync. У меня одностраничник, при переходе по роутам всё нормально, но если я на каком-то роуте меняю код, у меня вызывается reload вкладки и идёт запрос к несуществующей странице, на что broserSync отвечает cannot get.
Редирект отпадает, само собой. Нужно ответить на любой гет индексной htmlкой, но res.send и res.sendFile в middleWare browserSync not defined. В доках плагина про middleware ровно один пример. логил res - ничего очевидного не дало.

UPD. native node ужасно неудобная вещь. Решил отдать нативными модулями, но не могу разобраться как передать данные в response всё равно.
if (req.headers["accept"] && req.headers["accept"].includes('text/html')){
              fs.readFile(path.join(taskTarget, 'index.html'), function(err, data){
                if (err) throw err;
                res.end(data);
              })
            }
            next()

Собсн я решил чекать все контент-тайпы к html и отдавать index разметку. Перехватить запрос и вытянуть данные из index получилось. Никак не получается отдать. Сейчас этот код работает как и без него, хоть условие и исполняется. res.end(data) не оч работает. Пробовал res.write(data);res.end(); - нода ругается на write after end, хотя, очевидно write вызывается before end....
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
EaGames
@EaGames
Front-end developer
я использую эту middleware-у

const browserSyncConfig = {
	server: {
		baseDir: "./dev/client",
		middleware: [
			function (req, res, next) { // Allow CORS
				res.setHeader('Access-Control-Allow-Origin', '*');
				next();
			},
			historyApiFallback() //for SPA application
		]
	},
	host: 'localhost',
	port: 3000,
	notify: false,
};
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы