Express / Node

时间:2017-12-10 21:54:44

标签: javascript node.js express post http-post

我正在使用Node和Express开发一个小型API项目。我有一个使用护照的登录系统,该部分工作正常。但是,我希望用户能够将信息输入到表单中,然后由API使用该表单来查找信息。我遇到的问题是,当我点击提交按钮,并且POST方法触发,调用操作时,我收到以下错误:用户未定义。我不能为我的生活理解正在发生的事情,我认为当我调用POST方法时,我不理解Node / Express的一个方面。 (我用Node / Express构建了一些项目并慢慢构建更大的东西。)无论如何,这是我的代码:

home.ejs文件:

<% include partials/header %>

<form method='POST' action='/home'>
   <input placeholder='firstname'>
   <input placeholder='lastname'>
   <button>Submit</button>
</form>
   

以下是'controller'文件夹中的代码:

const request = require('request');

//Home Route 
module.exports.home = (req,res) => {
    let errors = null;
    res.render('home', {
       errors: errors
    });
 }

 //Home Route for posts
 module.exports.homePost = (req, res) => {
     let errors = null;
     res.render('homePost', {
        errors: errors
      })
  }

My Header.ejs文件:

<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
  <% if (user) { %>
    <li class="nav-item active">
      <a class="nav-link" href="/logout">Logout<span class="sr-only">
     (current)</span></a>
    </li>
    <li class="nav-item active">
      <a class="nav-link" href="/test">Test<span class="sr-only">(current)
     </span></a>
    </li>
  <% } else { %>
    <li class="nav-item">
      <a class="nav-link" href="/signup">Sign Up</a>
    </li>
  <% } %>
</ul>

最后,我的app.js文件的一部分:

app.get('/home', ensureAuthenticated, ctrlMain.home); //This gets the home page just fine.
app.post('/home', ensureAuthenticated, ctrlMain.homePost); //The problem seems to be coming from here-when I execute the POST Method. 

//Access Control
function ensureAuthenticated(req, res, next) {
   if(req.isAuthenticated()){
      return next();
   }else {
     req.flash('danger', 'Please Login');
     res.redirect('/')
   }
 }

用户登录系统工作正常 - 只是不明白为什么表单上的post方法不起作用。我相信我在这里缺少一些基本的东西。任何帮助都会很棒!

我还将添加passport.js文件 - 用户基本上来自:

const LocalStrategy = require('passport-local').Strategy;
const User = require('../models/user');
const config = require('../config/database');
const bcrypt =require('bcryptjs');
const passport = require('passport');

module.exports = function(passport){

//Local Strategy
passport.use(new LocalStrategy(function(username, password, done){

//Match User name
let query = { username:username };

User.findOne(query, function(err, user){
  if (err) throw err;
  if (!user){
    return done(null, false, {message: 'No user found'});
  }

  //Match Password
  bcrypt.compare(password, user.password, function(err, isMatch){
    if(err) throw err;
    if (isMatch){
      return done(null, user);
    }else{
      return done(null, false, {message: 'Wrong Password!!'});
     }
    });
   });
  }));
 }

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

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

0 个答案:

没有答案