Как выполнить PUT in node JS
Ниже приведен мой app.js код.
import bodyParser from 'body-parser'; import cors from 'cors'; import requestIp from 'request-ip'; import os from 'os'; import { AppRoutes, AuthRoutes } from './routes'; const app = express(); app.use(cors()); app.disable('x-powered-by'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use((req, res, next)=> { const clientIp = requestIp.getClientIp(req); logger.debug(JSON.stringify(req.socket.address())); logger.debug(`incoming IP ${clientIp}`); next(); }); // Api Routes. app.use('/api/login', AppRoutes); app.use('/api', verifyToken, AuthRoutes); export default app;
Ниже приведен мой index.js код. Приведенный ниже код отлично работает для GET и POST, но не работает для PUT. Это дает ошибку.
Цитата:У вас нет разрешения на доступ к /api/save-user-profile/{user-name}.
import { getCustomersbyId } from './controller/customer-controller'; import { Login } from './controller/login'; import { modelEdit, saveProfile } from './controller/extension'; const AuthRoutes = Router(); const AppRoutes = Router(); AuthRoutes.get('/customers/', getCustomersbyId); AuthRoutes.post('/model-entity-links/info', modelEdit); AuthRoutes.put('/save-user-profile/:username', saveProfile); AppRoutes.post('/', Login); export { AuthRoutes, AppRoutes };
Что я уже пробовал:
Я попробовал ниже код, но все равно та же проблема.
app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS'); next(); });
Kris Lantz
Когда ваше приложение связывается с сервером, как сервер решает, кто делает запрос?
Telstra
мы отправляем токен аутентификации в заголовке, который определит действительного запросчика. Я не понимаю, как GET и POST работают, а не PUT.
Kris Lantz
и токен привязан к типу учетной записи, правильно? т. е. общий пользователь
Telstra
Проблема в том, что я могу сделать запрос PUT локально. Но когда я развертываю его на сервере Linux, он дает мне проблему доступа. Нужно ли нам делать что-то diff на сервере Linux, чтобы выполнить PUT?
Kris Lantz
Я не уверен в различиях в local, но во время разработки с django наши запросы API должны были быть аутентифицированы, а разрешения привязаны к учетным записям. Обычные пользователи могли публиковать/получать, но только администраторы имели доступ к удалению/помещению. Какой-то ресурс на этом сервере должен управлять этим, потому что вы не хотите, чтобы delete/put был открыт и использовался всеми.
Ошибка заключается в том, что это проблема с разрешениями, поэтому я бы исследовал, как они обрабатываются.