2014-11-07 1 views
0

я просто создал экземпляр MongoDB на Ubuntu 14,04, с аутентификацией по username:password. пользователем Я создал, как это:Какая роль пользователя MongoDB может выполнять POST-вызовы?

{ 
    "_id" : "myDatabase.myUser", 
    "user" : "myUser", 
    "db" : "myDatabase", 
    "roles" : [ { "role" : "readWrite", "db" : "myDatabase" } ] 
} 

И в URI строки, которые я использую на моем REST API написано в Node.js (с экспресс и мангуста), как:

mongodb://myUser:[email protected]:27017/myDatabase 

Связь ОК и GET м ethods работает отлично, но когда я использую метод POST, как Signup по электронной почте/пароль, ответ:

Status Code:405 Not Allowed 

Любая идея? Заранее спасибо!

FYI: Я использую Nginx в качестве обратного прокси-сервера и веб-сервер для Frontend (AngularJS приложение), и конфигурация является:

server { 
    listen 80; 
    server_name example.com; 

    access_log /var/log/nginx/nginx.access.log; 
    error_log /var/log/nginx/nginx.error.log; 

    location/{ 
    expires -1; 
    add_header Pragma "no-cache"; 
    add_header Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"; 
    root /usr/share/www; 
    try_files $uri $uri/ /index.html =404; 
    } 

    location /api/v1 { 
    proxy_set_header "Access-Control-Allow-Origin"; 
    proxy_set_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, PUT, DELETE"; 
    proxy_set_header "Access-Control-Allow-Headers" "X-Requested-With,Accept,Content-Type, Origin"; 

    proxy_pass http://127.0.0.1:3000/api/v1; 
    proxy_buffering on; 

    proxy_set_header Host  $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header origin  "http://example.com"; 
    } 
} 

ответ

1

Я думаю, что это не является ограничением MongoDB. Mongo не может знать, является ли запрос POST или GET. Вы подтвердили, пришел ли запрос к серверу nodejs? Я думаю, что nginx - это тот, который возвращает код состояния 405.

Возможно, что отказ произошел из-за попытки вернуть статическую страницу в ответ на запрос POST. Попробуйте добавить в nginx.conf файл:

# To dispatch static pages on POST request 
    error_page 405 = 200 $uri; 
+1

Спасибо @ Jose! Я пробовал это, но пока не работал. Я добавляю следующее: 'proxy_redirect off;' и работает! –

0

я добавил следующее и Nginx, по крайней мере работает !:

proxy_redirect off;

В Nginx конфигурации для умолчанию теперь:

server { 
    listen 80; 
    server_name example.com; 

    access_log /var/log/nginx/nginx.access.log; 
    error_log /var/log/nginx/nginx.error.log; 

location/{ 
    expires -1; 
    add_header Pragma "no-cache"; 
    add_header Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"; 
    root /usr/share/www; 
    try_files $uri $uri/ /index.html =404; 
} 

location /api/v1 { 
     proxy_set_header 'Access-Control-Allow-Origin' 'http:/example.com'; 
     proxy_set_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE'; 
     proxy_set_header 'Access-Control-Allow-Headers' 'X-Requested-With,Accept,Content-Type, Origin'; 

     proxy_pass http://127.0.0.1:3000/api/v1; 
     proxy_redirect off; 
     proxy_buffering on; 

     proxy_set_header Host  $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header origin  "http://example.com"; 
    } 
} 

Надеюсь, это будет справедливо для кого-то.

Смежные вопросы