提交表单时无法开机自检/注册错误 - NodeJs



我在我的应用程序中使用了NodeJs,Express和MongoDB。我正在尝试注册一个新用户。

我有一个注册表,如下所示:

注册.hbs

<form action="/register" method="post" class="user">
<div class="form-group row">
<div class="col-sm-6 mb-3 mb-sm-0">
<input type="text" class="form-control form-control-user" name="firstname" id="exampleFirstName" placeholder="First Name">
</div>
<div class="col-sm-6">
<input type="text" class="form-control form-control-user" name="lastname" id="exampleLastName" placeholder="Last Name">
</div>
</div>
<div class="form-group">
<input type="email" class="form-control form-control-user" name="email" id="exampleInputEmail" placeholder="Email Address">
</div>
<div class="form-group row">
<div class="col-sm-6 mb-3 mb-sm-0">
<input type="password" class="form-control form-control-user" name="pass1" id="exampleInputPassword" placeholder="Password">
</div>
<div class="col-sm-6">
<input type="password" class="form-control form-control-user" name="pass2" id="exampleRepeatPassword" placeholder="Repeat Password">
</div>
</div>
<button type="submit" class="btn btn-primary btn-block">Register Account</button>
<hr>
</form>

管理员路由.js

router.route('/register')
.get(adminController.registerGet)
.post(adminController.registerPost);

管理员控制器.js

registerGet: (req, res) => {
res.render('admin/register');
},
registerPost: (req, res) => {
let errors = [];
if(!req.body.firstname){
errors.push({message: 'First name is mandatory'});
}
if(!req.body.lastname){
errors.push({message: 'Last name is mandatory'});
}
if(!req.body.email){
errors.push({message: 'Email field is mandatory'});
}
if(req.body.pass1 !== req.body.pass2){
errors.push({message: 'Passwords do not match'});
}
if(errors.length > 0){
res.render('admin/register', {
errors: errors,
firstname: req.body.firstname,
lastname: req.body.lastname,
email: req.body.lastname
});
}
else{
User.findOne({email: req.body.email}).then(user =>{
if(user){
req.flash('error-message', 'Email alredy exists.');
res.redirect('admin/register');
}else{
const newUser = new User(req.body);
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(newUser.pass1, salt, (err, hash) =>{
newUser.pass1 = hash;
newUser.save().then(user => { 
req.flash('success-message', 'New user registered.');
res.redirect('admin/register');
});
});
});
}
})
}
}

应用.js

const app = express();
/* connecting database */
mongoose.connect(mongoDbUrl, {useNewUrlParser: true, useUnifiedTopology: true})
.then(response => {
console.log('MongoDB connected successfuly');
}).catch(err => {
console.log('MongoDB connection faild');
});
/* view engine setup */
app.engine('.hbs', expressHsb({defaultLayout: 'default', extname: '.hbs', helpers: {select: selectOption}}));
app.set('view engine', '.hbs');
/* configure express */
app.use(express.json());
app.use(express.urlencoded({extended: true}));
app.use(express.static(path.join(__dirname, '/public')));
/* Method Override Middleware*/
app.use(methodOverride('newMethod'));

/*  Flash and Session*/
app.use(session({
secret: 'anysecret',
saveUninitialized: true,
resave: true
}));
app.use(flash());
/* Use Global Variables */
app.use(globalVariables);
/* File Upload Middleware*/
app.use(fileUpload());
/* routes */
const defaultRoutes = require('./routes/defaultRoutes');
const adminRoutes = require('./routes/adminRoutes');
app.use('/', defaultRoutes);
app.use('/login', defaultRoutes);
app.use('/admin', adminRoutes);
/* Start The Server */
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});

当我提交表格时,出现以下错误

Cannot POST/register

我在这里找不到我错过了什么。

/register做了一条路线.

在表单上,我声明了action="/register" method="post"的操作和方法,这将我带到控制器。

也许我在控制器中缺少一些东西,不确定是否感谢任何帮助。

根据您的应用程序.js代码,操作应如下所示

<form action="/admin/register" method="post" class="user">
</form>

最新更新