У меня есть Rest API, созданный с помощью Koa с некоторыми маршрутами, но в то же время он будет обслуживать мой Front (созданный с помощью JS framework и собственный роутер).
Дело в том, что когда я получаю доступ из браузера localhost/user, я хочу отобразить переднюю часть, но когда я достигаю того же URL-адреса из fetch / ajax / XMLHttpRequest, я хочу отобразить результат JSON (тот, который дал Коа-маршрутизатором).
Поэтому я хотел бы включить маршрут /user из API, только если он вызывается из XHR.
Я сделал свое промежуточное ПО isXMLHttpRequest следующим образом:
module.exports = async (ctx, next) => {
if(ctx.request.get('X-Requested-With') === 'XMLHttpRequest') {
return next()
}
}
Затем в моем koa-маршрутизаторе я сделал что-то вроде:
const Router = require('koa-router')
const isXMLHttpRequest = require("@middlewares/isXMLHttpRequest")
const router = new Router()
const user = require("@routes/user")
router.use('/user', isXMLHttpRequest, user.routes(), user.allowedMethods())
И потом, это работает, когда я делаю какой-то XHR-запрос, у меня есть JSON, как и планировалось, но если я попытаюсь получить доступ к /user из браузера, API выдаст мне ошибку «Не найдено», а не мой фронт...
Я искал, как пропустить функцию router.use, если запрос не сделан в XHR, но я не могу найти решение...
Я думаю, что это в состоянии промежуточного программного обеспечения, я должен что-то вернуть, но что я могу сделать, чтобы коа-маршрутизатор не дал мне 404 ...
Возможно ты можешь помочь мне ?