1

我正在使用带有节点 js 的 Express。如果我在不同的主机或服务器上运行我的 HTML 模板(除了我的应用程序正在运行的那个),那么我不会得到任何响应。

如果我从托管在同一服务器上的文件向节点服务器发出 post 请求,那么它会成功给出 JSON 响应。

我想创建一个 REST API 应用程序,这样每个人都可以发布请求并使用响应数据。

我的 HTML 文件代码(在节点服务器上本地运行):

<script type="javascript">
function submitit() {
    var name = $('#name').val();
    var id = $('#pw').val();
    var obj = {
        name: name,
        id: id
    };
    //posting on node server
    $.post('http://localhost:3001/user', {
        data1: obj
    }, function (data, status) {
        alert(data);
        //window.location.href = "http://google.com";
    }, 'json')
}
</script>
<body>
    <h1 class="hone">Log in to site.</h1>
    <form method = "post" id="yourform">
        user id :<input type="text" id='name' name="userid" /><br />
        password :<input type="text" id='pw'  name="password" /><br />
    </form>
    <input id="formsubmit" type="button" onclick='submitit();' value="login" /><br />
    <div id="flash"></div>
</body>

节点服务器上的 app.js:

app.post("/user", function (req, res) {
    console.log("ok");
    //var h=req.params.name;
    var user = {
        "name": "sdf",
        "add": "f"
    };
    //var r = req.body.name;

    console.log(user);
    console.log(req.body.data1);
    res.json(user);
});

如果我从同一主机请求,这工作正常,但如果从文件发送请求到另一台机器,它就不起作用。

4

1 回答 1

4

有解决方案,只需要添加中间件进行跨域通信

将波纹管中间件添加到您的 app.js 或脚本代码中。

var allowCrossDomain = function(req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'Content-Type');

    next();
}

app.use(allowCrossDomain);
于 2013-10-27T06:49:31.683 回答