我正在使用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);
});
如果我从同一台主机请求,这样可以正常工作,但是如果从一个文件发送一个请求,则它不能正常工作。
答案 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);