【问题标题】:Post Request from Nodejs to Nodejs从 Nodejs 向 Nodejs 发布请求
【发布时间】:2017-01-02 00:13:11
【问题描述】:

我有一个 nodejs-express 服务器 (1),它与一个 mongodb 和一个 web 服务器 (2) 在 nodejs-express 中使用 Angularjs。我正在尝试发出 1->2 的发布请求,但我收到了405 Method Not Allowed(尝试使用邮递员),如果我检查标题选项卡,它会显示:Allow →GET, HEAD, OPTIONS

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);
        });
}

server/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)

(服务器 2)

知道为什么它找不到我的方法吗?任何帮助将不胜感激!

【问题讨论】:

  • 很确定你的app.post 需要在你的app.all 之前,但我不是100% 确定.....
  • 我认为您无法从响应中“读取”状态代码。您只能像 response.status(200) 那样“设置”状态代码。这是我们“设定”的东西。尝试避免 if-else 并执行 response.status(200).end(JSON.stringify(request.body))

标签: angularjs node.js express


【解决方案1】:

如果有人遇到类似问题,我解决了我的问题。错误在于我使用 gulp 运行/编译 Web 服务器的方式。 以下在我的情况下有效:

   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

    });

【讨论】:

    猜你喜欢
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 2018-02-20
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    相关资源
    最近更新 更多