好吧,我觉得自己像个白痴,因为我已经做了一千次......但我已经和他争斗了一个多小时,准备去吃午饭。我希望有人能在我回来的时候回答:)我需要将密码输入与我在数据库中存储的内容进行比较。当我记录我在服务中发送到后端的对象时,它会完美显示,但是当我尝试将返回对象发送到后端时,我只是在登录时得到一个空对象" req.params&#34 ;.我也试过用" POST"而不是" GET"并记录" req.body"但这也是一个空物。有人可以告诉我,我做错了什么?我已经这么做了很多次,因为不得不提出这个问题而感到愚蠢,但我不能为我的生活弄明白这一点!提前致谢!这是我的代码
Controller (angular)
$scope.checkOldPassword = function(oldPassword) {
var returnObj = {
oldPassword: oldPassword
}
userSettingsService.checkPassword(returnObj).then(function(response){
console.log(response);
})
}
Service
this.checkPassword = function(oldPassword) {
console.log(oldPassword);
return $http({
method: 'GET',
url: '/api/checkOldPassword',
params: oldPassword
}).then(function(response) {
return response.data;
})
};
Server.js
app.get('/api/checkOldPassword', ensureAuthenticated, UserCtrl.checkOldPassword)
UserCtrl.js (node)
checkOldPassword: function(req, res, next) {
console.log(req.params);
}
答案 0 :(得分:1)
尝试从服务中搜索表单时添加标题
headers = { 'Content-Type': 'application/x-www-form-urlencoded' };
this.checkPassword = function(oldPassword) {
console.log(oldPassword);
return $http({
method: 'GET',
url: '/api/checkOldPassword',
params: oldPassword,
headers: headers
}).then(function(response) {
return response.data;
})
};
答案 1 :(得分:0)
假设您正在使用Express,req.params
是一个包含映射到命名路由“parameters”的属性的对象。例如,如果您有route / user /:name,那么“name”属性可用作req.params.name。 (参见http://expressjs.com/en/4x/api.html#req.params)在您的情况下,您没有调用这样的URL。
我相信你有(至少)两个选择:
选项1:
您可能需要更改$http
来电,以取代' params'通过'数据' (我不知道Angular但this doc似乎提到.data
而不是.params
;无论如何,Express路线需要改变)
return $http({
method: 'POST',
url: '/api/checkOldPassword',
data: {password: oldPassword}
}).then(function(response) {
return response.data;
})
然后在req.body
req.params
代替UserCtrl.js
Server.js
app.post('/api/checkOldPassword', ensureAuthenticated, UserCtrl.checkOldPassword)
UserCtrl.js (node)
checkOldPassword: function(req, res, next) {
console.log(req.body.password);
}
选项2:
你坚持req.params
,然后调整你正在调用的URL(但密码将随URL一起发送,它不是很安全)
return $http({
method: 'GET',
url: '/api/checkOldPassword/'+oldPassword
}).then(function(response) {
return response.data;
})
然后你的路线应该是
Server.js
app.get('/api/checkOldPassword/:password', ensureAuthenticated, UserCtrl.checkOldPassword)
UserCtrl.js (node)
checkOldPassword: function(req, res, next) {
console.log(req.params.password);
}
PS:关于您的评论,无论您选择哪种方式,Angular $http
来电和快捷路线app.xxx
的方法都应匹配