gpt4 book ai didi

javascript - Angular POST 请求不起作用

转载 作者:行者123 更新时间:2023-11-28 05:14:39 24 4
gpt4 key购买 nike

我已经使用 Passport.js 设置了注册和登录系统。我在前端使用 Angular.js。但是当我使用 Angular 时,它不会注册我的用户。没有 Angular ,效果很好。请参阅下面的代码:

没有 Angular 代码(它有效):

<form action="/signup" method="post">
<div class="form-group">
<label>Email</label>
<input type="text" class="form-control" name="email">
</div>
<div class="form-group">
<label>Password</label>
<input type="password" class="form-control" name="password">
</div>

<button type="submit" class="btn btn-warning btn-lg">Signup</button>
</form>

使用 Angular 代码(不起作用):

<!doctype html>
<html ng-app="login">

<head>
<title>Node Authentication</title>
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular-animate.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular-aria.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-material/1.0.4/angular-material.js"></script>

<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css">
<!-- load bootstrap css -->
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css">
<!-- load fontawesome -->
<script src="./javascripts/controllers/signup.js"></script>
<style>
body {
padding-top: 80px;
}
</style>
</head>

<body ng-controller="loginCtrl">
<div class="container">

<div class="col-sm-6 col-sm-offset-3">

<h1><span class="fa fa-sign-in"></span> Signup</h1>

<!-- show any messages that come back with authentication -->
<% if (message.length> 0) { %>
<div class="alert alert-danger">
<%=m essage %>
</div>
<% } %>

<!-- LOGIN FORM -->
<form>
<div class="form-group">
<label>Email</label>
<input type="text" class="form-control" ng-model="user.email">
</div>
<div class="form-group">
<label>Password</label>
<input type="password" class="form-control" ng-model="user.password">
</div>

<button ng-click="signup()" class="btn btn-warning btn-lg">Signup</button>
</form>

<hr>

<p>Already have an account? <a href="/login">Login</a>
</p>
<p>Or go <a href="/">home</a>.</p>

</div>

</div>

Angular Controller 代码:

var login = angular.module('login', [])

login.controller('loginCtrl', function($scope,$http){

$scope.user = {};

$scope.signup = function(){

return $http.post('/signup',$scope.user)
.then(function(data) {
console.log("da" + data);
});
};

})

注册途径:

    // process the signup form
app.post('/signup', passport.authenticate('local-signup', {
successRedirect : '/profile', // redirect to the secure profile section
failureRedirect : '/signup', // redirect back to the signup page if there is an error
failureFlash : true // allow flash messages
}));

注意:

在后端我设置了一个 Node/Express.js API。成功注册后,它使用 Passport.js 将用户添加到 MongoDB 中,并将用户重定向到个人资料页面。

但是当前数据正在进入数据库(我可以在数据库中看到新用户),它不会将用户重定向到个人资料页面,也不会显示我发回的任何错误消息(即,如果用户已经存在)

最佳答案

AJAX 请求不会重定向浏览器。如果您想重定向到新页面,则需要在 API 成功响应后告诉 Angular 路由器执行此操作。如果您不使用 Angular 路由器,只需使用 window.location 进行重定向。

return $http.post('/signup',$scope.user)
.then(function(data) {
console.log("da" + data);
window.location.href = '/profile';
});

您的 /signup 本质上是 API 的端点。调用它会以某种方式重定向,但它只会根据响应进行重定向。因此,您的 Angular 应用程序将收到重定向的响应,但它不会重定向浏览器本身。如果您要从浏览器直接发布到该 URL,它将重定向,但通过 AJAX 调用完成的任何 HTTP 路由不会直接影响浏览器。

关于javascript - Angular POST 请求不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41073912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com