2016-12-31 5 views
4

나는 nodejs - 익스프레스 서버 이 Nodejs하기 (1) MongoDB를하고 웹 서버 와 통신 (2)에서 nodejs-명시 AngularJS와와. 내가 POST 요청 1> 2를 만들기 위해 노력하고 있지만이 405 Method Not Allowed 무엇입니까 (우편 배달부를 사용하여 시도)와 내가 헤더 탭을 선택하면 그것을 보여줍니다 Allow →GET, HEAD, OPTIONSPOST 요청

app.js - 포스트 방법 1 :

function sendToDashboard(jsonData) { 
     console.log ("I am here in node: ", jsonData); 

     request({ 
      uri: "http://******.com:9000/getQueryJson", 
      method: "POST", 
      timeout: 10000, 
      followRedirect: true, 
      maxRedirects: 10 
     }, function(error, response, body) { 
      console.log(body); 
     }); 
} 

서버/app.js는 - 2에서 방법을 얻을 :

var bodyParser = require("body-parser"); // Require Body parser module 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var express = require('express'); 
var path = require('path'); 
var app = require('express')(); // Require Express module 
var http = require('http').Server(app); // Http server 
var bodyParser = require("body-parser"); // Require Body parser module 

    app.use(logger('dev')); 
    app.use(bodyParser.json()); 
    app.use(bodyParser.urlencoded({ extended: false })); 
    app.use(cookieParser()); 
    app.use(express.static(path.join(__dirname, 'public'))); 

    app.all('*', function(req, res,next) { 


     /** 
     * Response settings 
     * @type {Object} 
     */ 
     var responseSettings = { 
      "AccessControlAllowOrigin": req.headers.origin, 
      "AccessControlAllowHeaders": "Content-Type,X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Date, X-Api-Version, X-File-Name", 
      "AccessControlAllowMethods": "POST, GET, PUT, DELETE, OPTIONS", 
      "AccessControlAllowCredentials": true 
     }; 

     /** 
     * Headers 
     */ 
     res.header("Access-Control-Allow-Credentials", responseSettings.AccessControlAllowCredentials); 
     res.header("Access-Control-Allow-Origin", responseSettings.AccessControlAllowOrigin); 
     res.header("Access-Control-Allow-Headers", (req.headers['access-control-request-headers']) ? req.headers['access-control-request-headers'] : "x-requested-with"); 
     res.header("Access-Control-Allow-Methods", (req.headers['access-control-request-method']) ? req.headers['access-control-request-method'] : responseSettings.AccessControlAllowMethods); 

     if ('OPTIONS' == req.method) { 
      res.send(200); 
     } 
     else { 
      next(); 
     } 


}); 

app.post('/getQueryJson', function(request, response) { 
     console.log ("I got here"); 
     if(response.statusCode == 200) { 

      console.log("TESTING......") 
      console.log("This is your request: ", request.body); 

      console.log("This is your request: ", JSON.stringify(request.body)) 
      response.send("Query Received"); 
     }else{ 
      response.send(" Error code: " + response.statusCode); 
     } 
    }); 


http.listen(9000,function(){ 
    console.log("Connected & Listen to port 9000"); 
}); 

파일 구조 :

(서버 1)

enter image description here

(서버 2)

enter image description here

내 방법을 찾을 수없는 이유는 어떤 생각? 어떤 도움이라도 대단히 감사하겠습니다!

+0

당신의'app.post'이'app.all' 전에 가야합니다,하지만 난 100 % 확실하지 않다 확신 ..... – Claies

+0

내가 당신을 생각 응답에서 상태 코드를 '읽을 수 없습니다.' response.status (200)와 같은 상태 코드 만 '설정'할 수 있습니다. 그것은 우리가 설정 한 것입니다. if-else를 피하고 response.status (200) .end (JSON.stringify (request.body))를 수행하십시오. –

답변

0

누군가 비슷한 문제가있는 경우, 제 문제를 해결했습니다. 그 결함은 내가 꿀꺽 꿀꺽 거리는 소리를 사용하여 웹 서버를 돌리고 컴파일하는 방식에 있었다. 내 경우 일 다음 :

gulp.task('connect', ['styles'], function() { 
     var serveStatic = require('serve-static'); 
     var express  = require('express'); 
     var app   = express(); 
     var bodyParser  = require('body-parser'); 
     var methodOverride = require('method-override'); 


     var port = process.env.PORT || 9000; 

     // added this part ================================================== 
     app.use(bodyParser.json()); // parse application/json 
     app.use(bodyParser.json({ type: 'application/vnd.api+json' })); // parse application/vnd.api+json as json 
     app.use(bodyParser.urlencoded({ extended: true })); // parse application/x-www-form-urlencoded 
     app.use(methodOverride('X-HTTP-Method-Override')); // override with the X-HTTP-Method-Override header in the request. simulate DELETE/PUT 
     // ================================================== 

     app.use(serveStatic('.tmp')); 
     app.use(serveStatic('app')); 
     app.use(express.static(__dirname + 'public')); // set the static files location /public/img will be /img for users 
     app.use('/bower_components', serveStatic('bower_components')); 

     // and this one ================================================== 
     require('./server/app')(app); // pass our application into our routes 
     // =============================================== 


     app.listen(port); 
     console.log('Magic happens on port ' + port);   // shoutout to the user 
     exports = module.exports = app;       // expose app 

    });