Я не могу использовать DELETE с express.jsJavascript

Форум по Javascript
Ответить
Anonymous
 Я не могу использовать DELETE с express.js

Сообщение Anonymous »

У меня есть authMiddleware:

Код: Выделить всё

const jwt = require('jsonwebtoken');

const authMiddleware = (req, res, next) =\> {
const token = req.cookies.token;

if (!token) {
return res.status(401).json({
success: false,
message: "Unauthorized",
});
}

try {
const decoded = jwt.verify(token, process.env.JWT_SECRET);
req.user = decoded;
next();
} catch (error) {
return res.status(401).json({
success: false,
message: "Unauthorized",
});
}

}
module.exports = {
authMiddleware,
}
У меня есть маршрут:

Код: Выделить всё

const express = require('express');
const { createRefuge, getUserRefuge, deleteRefuge } = require('../controllers/refuge-controller.js');
const { authMiddleware } = require('../middlewares/auth-middleware.js');
const upload = require('../middlewares/storage-middleware.js');
const router = express.Router();

router.post('', authMiddleware, upload.single('bannerUrl'), createRefuge)
router.get('', authMiddleware, getUserRefuge)
router.delete('/:id', authMiddleware, deleteRefuge)

module.exports = router;
У меня есть index.js:

Код: Выделить всё

const express = require('express');
const authRoute = require('./routes/auth-route.js');
const refugeRoute = require('./routes/refuge-route.js');
const path = require('path');
const helmet = require('helmet');

const app = express();
const PORT = 8080;
const cors = require('cors');
const COOKIE_PARSER = require('cookie-parser');

const corsOptions = {
origin: process.env.CLIENT_URL || 'http://localhost:3000',
credentials: true,
methods: \['GET','POST','PUT','DELETE','PATCH','OPTIONS'\],
allowedHeaders: \['Content-Type','Authorization'\],
};
app.use(cors(corsOptions));

app.use(helmet())
app.use(express.json());
app.use(COOKIE_PARSER());

app.use('/api/auth', authRoute);
app.use('/api/refuge', refugeRoute);

app.use('/uploads', express.static(path.join(\__dirname, 'uploads')));

app.listen(PORT, () =\> {
console.log(`Server is running on http://localhost:${PORT}`);
});
и мой вызов ReactJs:

Код: Выделить всё

deleteRefuge: async (id: number): Promise => {         set({ isLoading: true });         try {             await axios.delete(`http://localhost:8080/api/refuge/$%7Bid%7D%60, { withCredentials: true });
set({ refuge: null, isLoading: false });
} catch (error) {

if (axios.isAxiosError(error)) {
set({ error: error.response?.data.message, isLoading: false });
throw error.response?.data.message;
} else {
set({ error: 'An unexpected error occurred', isLoading: false });
throw 'Erreur lors de l\'inscription';
}
}
}
Когда я использую DELETE, у меня возникает эта ошибка: «Блокировка запроса с несколькими источниками (запрос между источниками): политика «Того же источника» не позволяет обращаться к удаленному ресурсу, расположенному по адресу http://localhost:8080/api/refuge/15. Причина: отсутствует метод в заголовке «Access-Control-Allow-Methods». «Блокировка запроса из разных источников: политика «Того же происхождения» не позволяет обращаться к удаленному ресурсу, расположенному по адресу http://localhost:8080/api/refuge/15. Причина: Ошибка запроса CORS. Код состояния: (null).»
Когда я удаляю параметры «withCredential» (код реакции), проблема исчезает. Мне нужны эти учетные данные, потому что пользователь должен войти в систему, чтобы использовать этот маршрут. Это проблема с промежуточным программным обеспечением? С предварительным просмотром OPTION?

Подробнее здесь: https://stackoverflow.com/questions/797 ... express-js
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»