向节点服务器发送post请求时没有得到响应

时间:2013-10-23 06:25:13

标签: node.js express

我正在使用Express和节点js。如果我在不同的主机或服务器上运行我的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);
});

如果我从同一台主机请求,这样可以正常工作,但是如果从一个文件发送一个请求,则它不能正常工作。

1 个答案:

答案 0 :(得分:2)

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

将中间件添加到你的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);