我正在使用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);
});
});