最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

提交表单时无法发布注册错误

IT培训 admin 1浏览 0评论

提交表单时无法发布/注册错误

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

我有一个看起来像这样的注册表:

register.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>

adminRoutes.js

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

adminController.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');
                            });
                        });
                    });
                }
            })
        }
    }

app.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"的操作和方法,将其带到控制器。

也许我缺少控制器中的某些功能,不确定是否有任何帮助。

回答如下:根据您的app.js代码,操作应类似于以下内容

提交表单时无法发布/注册错误

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

我有一个看起来像这样的注册表:

register.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>

adminRoutes.js

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

adminController.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');
                            });
                        });
                    });
                }
            })
        }
    }

app.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"的操作和方法,将其带到控制器。

也许我缺少控制器中的某些功能,不确定是否有任何帮助。

回答如下:根据您的app.js代码,操作应类似于以下内容

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论