如何从Http Post和Insert获取参数

时间:2016-06-08 22:58:06

标签: javascript jquery angularjs node.js

我正在尝试捕获用户输入的凭据并将其用作查询数据库的参数。不幸的是,我对如何编写该过程感到有点迷茫。我正在使用angular,express,node,jQuery和html。我对angular,node和jQuery不是很有经验,所以请原谅我这是非常简单的事情;我在这里学习。

以下是表格所在的html:

<!DOCTYPE html > 
<html ng-app="token">
<%include header%>
<%include navbar%>
<div ng-controller="TokenCtrl">
<form ng-submit="submitLogin(loginForm)" role="form" ng-init="loginForm = {}">
<div class="form-group">
<label>email</label>
<input type="email" name="email" ng-model="loginForm.email" required="required" class="form-control"/>
</div>
<div class="form-group">
<label>password</label>
<input type="password" name="password" ng-model="loginForm.password" required="required" class="form-control"/>
</div>
<button class="btn btn-primary btn-lg" ng-click="handleLoginBtnClick()">Sign in</button>
</form>
</div>
</body>

这是TokenCtrl和令牌模块的JS,它是ng-token-auth的衍生物:

 var a = angular.module('token', ['ng-token-auth']);
 a.config(function($authProvider) {
// the following shows the default values. values passed to this method
// will extend the defaults using angular.extend

$authProvider.configure({
  apiUrl:                  '/users',
  tokenValidationPath:     '/auth/validate_token',
  signOutUrl:              '/auth/sign_out',
  emailRegistrationPath:   '/auth',
  accountUpdatePath:       '/auth',
  accountDeletePath:       '/auth',
  confirmationSuccessUrl:  window.location.href,
  passwordResetPath:       '/auth/password',
  passwordUpdatePath:      '/auth/password',
  passwordResetSuccessUrl: window.location.href,
  emailSignInPath:         '/auth/sign_in/:email/:password',
  storage:                 'cookies',
  forceValidateToken:      false,
  validateOnPageLoad:      true,
  proxyIf:                 function() { return false; },
  proxyUrl:                '/proxy',
  omniauthWindowType:      'sameWindow',
  tokenFormat: {
    "access-token": "{{ token }}",
    "token-type":   "Bearer",
    "client":       "{{ clientId }}",
    "expiry":       "{{ expiry }}",
    "uid":          "{{ uid }}"
  },
  cookieOps: {
    path: "/",
    expires: 9999,
    expirationUnit: 'days',
    secure: false,
    domain: 'domain.com'
  },
  createPopup: function(url) {
    return window.open(url, '_blank', 'closebuttoncaption=Cancel');
  },
  parseExpiry: function(headers) {
    // convert from UTC ruby (seconds) to UTC js (milliseconds)
    return (parseInt(headers['expiry']) * 1000) || null;
  },
  handleLoginResponse: function(response) {
    return response.data;
  },
  handleAccountUpdateResponse: function(response) {
    return response.data;
  },
  handleTokenValidationResponse: function(response) {
    return response.data;
  }
});
 });
  a.controller('TokenCtrl', function($scope, $auth) { 
  $scope.handleRegBtnClick = function() {
  $auth.submitRegistration($scope.registrationForm)
    .then(function(resp) {
      // handle success response
    })
    .catch(function(resp) {
      // handle error response
    });
};
 $scope.handlePwdResetBtnClick = function() {
  $auth.requestPasswordReset($scope.pwdResetForm)
    .then(function(resp) {
      // handle success response
    })
    .catch(function(resp) {
      // handle error response
    });
};
 $scope.handleLoginBtnClick = function() {
  $auth.submitLogin($scope.loginForm)
    .then(function(resp) {
      // handle success response
    })
    .catch(function(resp) {
      // handle error response
    });
};
$scope.handleSignOutBtnClick = function() {
  $auth.signOut()
    .then(function(resp) {
      // handle success response
    })
    .catch(function(resp) {
      // handle error response
    });
};
});

在这个函数的运行中,它会导致这个url:

'/auth/sign_in/:email/:password'

使用Express,我将此网址路由到另一个功能。这是路线代码:

app.post('/users/auth/sign_in/:email/:password', routes.verifyusers);

导致,

exports.verifyusers= function(req, res) {
models.user.find({
where: {
  email: req.params.email,
  password: req.params.password
}
 }).then(function(user) {
    if(user) {
        console.log("alright !")
    };
});
};

当代码运行时,这就是我在控制台中获得的内容:

Executing (default): SELECT "id", "username", "email", "password",    "createdAt", "updatedAt" FROM "users" AS "user" WHERE "user"."email" =   ':email' AND "user"."password" = ':password' LIMIT 1;
:email
:password

结果与表格数据无关。

1 个答案:

答案 0 :(得分:0)

我认为问题来自emailSignInPath: '/auth/sign_in/:email/:password',

你应该试试

// config
emailSignInPath: '/auth/sign_in'

// route declaration
app.post('/users/auth/sign_in', routes.verifyusers);

// route action
exports.verifyusers = function(req, res) {
  models.user.find({
    where: {
      email: req.body.email,
      password: req.body.password
    }
  }).then(function(user) {
    if(user) {
      console.log("alright !")
    };
  });
};

ps:不要忘记在你的应用app.use(express.bodyParser())

中声明一个身体解析器