我真的很难站起来从html页面到我的node.js应用程序然后再回到html页面的双向数据传输。
我很确定我已经找到了正确的解决方案,但是我只是没有使它起作用。
我在node.js应用程序中使用了以下内容:
var express = require('/usr/lib/node_modules/express');
var app = express();
app.use(function(err, req, res, next){
console.error(err.stack);
res.send(500, 'Something broke!');
});
app.use(express.bodyParser());
app.post('/namegame', function(req, res)
{
console.log('Got request name: ' + req.body.name);
setTimeout(function()
{
var newName = "New Name-O";
res.send({name: newName});
}, 2000);
}
);
app.listen(8088, function() { console.log("Server is up and running"); });
以下是我的html页面:
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.js"></script>
<script type="text/javascript">
// wait for the DOM to be loaded
$(document).ready(function()
{
alert("Got here!");
function DisplayName(response)
{
alert(response.newName);
}
$("#NameGameIt").click(function(event)
{
alert("How about now?");
//event.PreventDefault();
var nameSubmitted = document.getElementById("name");
//var nameSubmitted = "help!!";
alert("Name: " + nameSubmitted.value);
$.ajax({
type: "POST",
url: "http://127.0.0.1:8088/namegame",
data: {name: nameSubmitted.value},
dataType: "json",
timeout: 2500,
success: function() { alert("???");},
error: function(error1, error2, error3)
{ alert("error"); },
complete: function(arg1, arg2, arg3)
{ alert("complete"); }
});
});
});
</script>
</head>
<body>
<h1>Test form for Ajax</h1>
</br>
Name: <input type="text" id="name" name="name"></br>
<input type="button" value="NameGameIt" id="NameGameIt">
</form>
</body>
</html>
因此,当我运行节点应用程序时,服务器运行正常。当我启动html页面时,收到警报“在这里!”。当我按下按钮“
NameGameIt”时,我收到警报“现在怎么样?” 然后是警报“名称:”
+输入的任何名称。当我单击该警报后,节点应用程序将立即看到该帖子并将其名称打印到控制台。两秒后,当节点发送响应时,浏览器将直接进入ajax帖子中的错误处理程序。在错误处理程序中唯一有用的数据是它是“错误”,实际上并没有什么用。
所以我知道消息正在从html页面到达节点,因为它打印出我发送的名称,并且我知道html页面正在从节点返回消息,因为直到节点上的超时它都不会出错发生触发发送。但是,我不知道为什么它继续将我发送到错误处理程序而不是成功。我已经使用node-
inspector逐步完成了节点代码,似乎成功地使用200代码成功构建了数据包,并在完成数据包处理后在.send内调用.end,所以我不认为其中任何一件事都在咬我。
我快疯了!如果有人看到我的缺失或对收集更多信息的方式有任何新的想法,我将非常感谢您的帮助。
您的代码非常好,但是几乎可以肯定,您会遇到跨域AJAX请求的问题。您可能正在本地文件系统上打开此HTML文件并以这种方式发出请求,这就是导致此问题的原因。
要修复它,添加app.use(express.static('public'));
如下:
var express = require('/usr/lib/node_modules/express');
var app = express();
app.use(function(err, req, res, next){
console.error(err.stack);
res.send(500, 'Something broke!');
});
app.use(express.bodyParser());
app.use(express.static('public'));
app.post('/namegame', function(req, res)
{
console.log('Got request name: ' + req.body.name);
setTimeout(function()
{
var newName = "New Name-O";
res.send({name: newName});
}, 2000);
}
);
app.listen(8088, function() { console.log("Server is up and running"); });
然后将您的html文件放在“公共”文件夹中。启动服务器后,您可以访问http://127.0.0.1:8088/file.html
并且代码可以正常运行。
问题内容: 我正在学习AngularJS,我想知道如何使用ExpressJS与Node正确连接。 这是我的控制器: 这是我的server.js: 我没有使用过人体分析仪。当我在控制器中使用函数时,我不知道如何使用body-parser从html获取表单值。使用body- parser时,值是从单击提交时的html获取的,还是从我将表单值作为参数传递给其的函数中获取的?请告诉我它是如何完成的。 编辑
问题内容: 我使用以下命令创建了expressjs应用程序: 使用以下命令运行应用程序时,出现以下错误: 如何解决? 问题答案: 您曾经使用与8080相同的端口运行另一台服务器。 也许您在其他Shell中运行过,请关闭它,然后再次运行。 您可以检查端口号。 可用或不使用 另外,您可以使用lsof:
我使用以下命令创建了expressjs应用程序: 当我使用:,我有以下错误: 如何修复它?
无论我尝试什么,当我访问docker机器ip时,我总是得到HTTP错误代码500。 我运行laradock通过Docker工具箱(操作系统:Windows 10),并有一个默认的虚拟机运行。我已经按照视频中的说明设置laradock。 我已经成功地将我需要的文件夹挂载到VM中,并根据我的代码在VM中的位置更改了docker-compose.yml: 这是我的docker-compose.yml文件
我正在使用SpringWebClient调用RESTAPI。我想根据响应抛出一个错误。例如,如果主体存在错误(400) 然后我想抛出一个带有“error message1”的错误。如果主体出现错误(400),则采用相同的方法 然后我想抛出一个错误,错误为\u cde 100020。我想用一种非阻塞的方式来做。
当我尝试使用JQuery POST向服务器发送数据时,我得到以下错误。 我做错了什么? 未捕获的TypeError:在e处非法调用(https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js:4:7727)在Ab(https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.