【问题标题】:cannot post form in angular - express无法以角度发布表格 - 快递
【发布时间】:2016-10-29 20:29:29
【问题描述】:

我在 angularJS 中的 post 请求表达有问题。 在客户端有一个 HTML 表单定义:

<div ng-controller="LoginCtrl">
   <form ng-submit="login()">
    <div>
        <label>Username</label>
        <input ng-model="username">

        <label>Password</label>
        <input ng-model="password" type="password">
    </div>
    <button type="submit">Submit</button>
   </form>
</div>

以及 Angular 控制器中的 post 方法:

angular.module('app')
  .controller('LoginCtrl', ['$scope', '$state', '$http', function($scope, $state, $http) {

    $scope.login= function(username, password) {
      console.log('Login');
      $http.post('/login', {username:username, password:password}).then(function(response) {
        if(response.data.success) {
          console.log('logged in');
          $state.go('home');
        }
        else {
          console.log('failed to log in');
        }
      });

    };

    $scope.user = {
      username: '',
      password: ''
    };
}]);

在路由的服务器端有 users.js 文件,其中定义了中间件:

var express = require('express');
var router = express.Router();
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;

var User = require('../models/user');

// Login
router.get('/login', function(req, res){
    res.render("login");
});


passport.use('local', new LocalStrategy(
  function(username, password, done) {
   User.getUserByUsername(username, function(err, user){
    if(err) throw err;
    if(!user){
        return done(null, false, {message: 'Unknown User'});
    }

    User.comparePassword(password, user.password, function(err, isMatch){
        if(err) throw err;
        if(isMatch){
            return done(null, user);
        } else {
            return done(null, false, {message: 'Invalid password'});
        }
    });
   });
  }));

passport.serializeUser(function(user, done) {
  done(null, user.id);
});

passport.deserializeUser(function(id, done) {
  User.getUserById(id, function(err, user) {
    done(err, user);
  });
});

router.post('/login',
  passport.authenticate('local', {successRedirect:'/', failureRedirect:'/login',failureFlash: true}),
  function(req, res) {
    res.redirect('/');
  });

module.exports = router;

当我点击提交按钮时,控制台中出现错误信息:POST http://localhost:3000/login 404 (Not Found)

有人知道问题出在哪里吗?

【问题讨论】:

  • 什么问题?你期望会发生什么,反而会发生什么?你得到什么样的错误(如果有的话)?

标签: javascript angularjs node.js express passport.js


【解决方案1】:

您在登录时缺少post。你需要这样的东西:

// Login
router.post('/login', function(req, res){
    // validate user credentials and login user
});

【讨论】:

  • 已经在user.js文件router.post('/login', passport.authenticate('local', {successRedirect:'/', failureRedirect:'/login',failureFlash: true}), function(req, res) { res.redirect('/'); });
猜你喜欢
  • 2018-12-28
  • 1970-01-01
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-07
  • 1970-01-01
相关资源
最近更新 更多