【发布时间】: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