我正试图从AngularJS表单读取数据并将其发送到Express服务器。发送数据的客户机函数确实执行了,但请求从未到达服务器。我认为url有问题。
我的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一致?
这里有什么问题?我相信整体结构是可以的,但是路径/url应该是什么?(即,不仅仅是上面例子中的值,还有它们的语义)。在线文档没有说明这一点。)
如果有帮助的话,我的HTML表单使用method="post"
而没有指定action
。我已经调整了这些和许多其他设置,但没有运气
答案是列出的答案的组合。
- 不 在URL中列出Express服务器的扩展名
- 将端口号作为
:3000
紧跟在IP地址之后。
AngularJS客户:
url: 'http://##.##.##.##:3000/login'
Express server route:
app.post('/login', function(req, res) {
console.log('Processing request...');
res.sendFile('/success.html');
});
我还发现我的Amazon Web Services实例的安全组阻止了端口3000上的传入流量。我的应用程序工作后,我打开这个端口到外面的世界。
只使用'/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'}
})
如果我们在login.js文件中看到代码,那么它清楚地表明它将从控制台运行。
node login.js
它将创建服务器实例来响应任何post请求。修改url
$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'}
});
尝试在$http上使用"params"而不是"data",如果标头是"application/x-www-form-urlencoded"或"application/json"并不重要,但使用"json"它将捕获"req.query "。param1"在NodeJS上。这对我有用,希望对你有帮助