如何在 Bluemix 中向节点应用程序发出 cors 请求

Posted

技术标签:

【中文标题】如何在 Bluemix 中向节点应用程序发出 cors 请求【英文标题】:How to do a cors request to a node app in Bluemix 【发布时间】:2015-07-29 18:13:34 【问题描述】:

我正在 bluemix 上制作一个绑定到业务规则服务的 nodeapp,并且我在 mobilefirst 上托管了另一个应用程序,我在其中创建了我的应用程序 UI。我想从 mobilefirst 应用程序发送数据并接收数据,有人告诉我使用 cors 请求,但我不知道该怎么做。

这是我的 app.js 文件:

var app = require("express")(),
restler = require("restler"),
bodyParser = require("body-parser");

app.use(bodyParser.json());

app.use(function(request, response, next) 
    response.header("Access-Control-Allow-Origin", "*");
    response.header("Access-Control-Allow-Headers", "Origin, X-Requested-With,Content-Type, Accept");
    next();
);


app.post("/", function(request, response) 
    var options = 
        username: "resAdmin",
        password: "replace"
    ;

    var url = "https://brsv2-6855bc66.ng.bluemix.net/DecisionService/rest" +  "/vacationsRuleApp/1.0/vacationsRuleProject/json";

    restler.postJson(url, request.body, options).on('complete', function(data) 
        response.send(data);
    );
);

app.listen(process.env.VCAP_APP_PORT || 8080);

这是我的客户端代码

$.post( 
    "http://busines-s-rules-vacationsruleapp.mybluemix.net/",
    
        "employeeID": "jujuju",
        "loanAmount": 10517320,
        "theEmployee": 
        "seniority": 3,
        "annualSalary": 10517320,
        "nbOfExtraVacationDaysBasedOnSeniority": 10517320
    ,
    "creditAmount": 20000,
    "__DecisionID__": "string",
    "AnnualSalary": 20000 ,
    function( data ) 
        alert(JSON.stringify(data));
        console.log(data);
    
);

【问题讨论】:

【参考方案1】:

您需要在app.js 中包含以下内容。以下将允许 CORS 请求。

app.js

var app = require("express")(),
 restler = require("restler"),
 bodyParser = require("body-parser");

app.use(bodyParser.json());

app.use(function(request, response, next) 
    response.header("Access-Control-Allow-Origin", "*");
    response.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
);


app.post("/", function(request, response) 
    var options = 
        username: "replace",
        password: "replace"
    ;

    var url = "https://brsv2-6855bc66.ng.bluemix.net/DecisionService/rest" + "/vacationsRuleApp/1.0/vacationsRuleProject/json";

    restler.postJson(url, request.body, options).on('complete', function(data) 
        response.send(data);
    );
);

app.listen(process.env.VCAP_APP_PORT || 8080);

然后在客户端使用 JQuery 你可以执行以下操作。

$.ajax (
    url: "https://busines-s-rules-vacationsruleapp.mybluemix.net",
    type: "POST",
    data: JSON.stringify( 
    "employeeID": "jujuju",
    "loanAmount": 10517320,
    "theEmployee": 
        "seniority": 3,
        "annualSalary": 10517320,
        "nbOfExtraVacationDaysBasedOnSeniority": 10517320
    ,
    "creditAmount": 20000,
    "__DecisionID__": "string",
    "AnnualSalary": 20000 ),
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function (data)
        console.log(data);
        $(".result").text(JSON.stringify(data));
    
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="result"></div>

您从 post call 发送的任何对象都将发送到业务规则服务。

【讨论】:

【参考方案2】:

CORS npm 模块让 Express 非常容易使用。

var express = require('express')
  , cors = require('cors')
  , app = express();

app.use(cors());

https://www.npmjs.com/package/cors

【讨论】:

以上是关于如何在 Bluemix 中向节点应用程序发出 cors 请求的主要内容,如果未能解决你的问题,请参考以下文章

如何在 reactjs 中向 nodejs RESTful API 发出 POST 请求

如何在Bluemix Node-Red Application中发送会议邀请(日历)[关闭]

如何在 React Native 中向 API 发出 POST 请求?

当您不知道页数时,如何使用 Node.js 在 while 循环中向 API 发出多个分页 GET 请求?

如何在 Laravel-8 和 InertiaJs 中向服务器发出 POST 请求时在浏览器中保留当前的 ​​GET url

在 QDialog 中创建线程并在 Qt 中向 QDialog 发出信号