Telstra Ответов: 0

Как выполнить 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 был открыт и использовался всеми.
Ошибка заключается в том, что это проблема с разрешениями, поэтому я бы исследовал, как они обрабатываются.

0 Ответов