我正在尝试从AngularJS表单中读取数据并将其发送到Express服务器。我的客户端函数发送数据确实执行,但请求永远不会到达服务器。我相信网址存在问题。
AngularJS控制器的相关部分:
$scope.loginUser = function() {
$scope.statusMsg = 'Sending data to server...';
$http({
url: 'http://##.##.##.##/login.js', // IP address replaced with ##'s
method: 'POST',
data: user,
headers: {'Content-Type': 'application/json'}
})
此执行,因为我看到第一行显示的消息。 url
是我的Express服务器的绝对路径。该URL应该是什么? (是否需要指向某个现有文件?)
我的 Express服务器的相关部分(同一目录中的login.js
):
var express = require("express");
var bodyParser = require("body-parser");
var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.post('*', function(req, res) {
console.log('Processing request...');
res.sendFile('/success.html');
});
app.listen(3000);
我执行此服务器,它会侦听端口3000。但是当我的客户端执行时,上面的app.post
方法永远不会运行,因为我从未在控制台上看到Processing request...
输出。这条路应该是什么?是否需要同意客户端中的URL?
这里有什么问题?我认为整体结构还可以,但路径/网址应该是什么?(即,不仅仅是他们的案例价值以上,但他们的语义。在线文档没有说清楚。)
如果有帮助,我的HTML表单会使用method="post"
而不会指定action
。我已经调整了这些和许多其他设置而没有运气。
答案 0 :(得分:2)
答案是所列答案的组合。
:3000
中。AngularJS客户端:
url: 'http://##.##.##.##:3000/login'
快速服务器路线:
app.post('/login', function(req, res) {
console.log('Processing request...');
res.sendFile('/success.html');
});
我还发现我的Amazon Web Services实例的安全组阻止了端口3000上的传入流量。我将此端口打开到外部世界后,我的应用程序工作正常。
答案 1 :(得分:1)
只需使用' / login'只是不要使用完整路径
$scope.loginUser = function() {
$scope.statusMsg = 'Sending data to server...';
$http({
url: '/login', // No need of IP address
method: 'POST',
data: user,
headers: {'Content-Type': 'application/json'}
})

答案 2 :(得分:0)
如果我们在login.js文件中看到代码,那么它会清楚地显示它将从控制台运行。
node login.js
这将创建服务器实例以响应任何发布请求。 更改网址。
$scope.loginUser = function() {
$scope.statusMsg = 'Sending data to server...';
$http({
url: 'http://##.##.##.##:3000', //Your url will be like this.
method: 'POST',
data: user,
headers: {'Content-Type': 'application/json'}
});
答案 3 :(得分:0)
尝试使用" params"而不是"数据"在$ http上,如果标题是" application / x-www-form-urlencoded"那么这并不重要。或" application / json"但使用" json"它将捕获" req.query.param1"在NodeJS上。 它对我有用,希望有所帮助