首页 > 解决方案 > 无法从注册表中发布

问题描述

我在 NodeJS 中实现了一个注册表单。单击提交按钮时,我无法从注册表单中获取数据。我不知道为什么会这样!请帮帮我。

user.js 存储在路由文件中。userregister.ejs 存储在视图文件中。

// users.js

var express = require('express');
var router = express.Router();

 //Get Login
 router.get('/login', function(req,res){
 res.render('userlogin');
 });

 //Get Register
 router.get('/register', function(req,res){
 res.render('userregister',{title:'Register'});
 });

 //Post Register
 router.post('/register', function(req,res){
 var nam = req.body.name;
 console.log(nam);
 });

 module.exports = router;


  //useregister.ejs

     <form method="POST" action="/register" >
          <div class="form-group">

          </div>
          <div class="form-group">
          <input type="text" name="name" placeholder="Name" required 
      class="form-control input-lg" />
          </div>
          <div class="form-group">
          <input type="text" name="username" placeholder="Username" 
     required class="form-control input-lg" />
          </div>
          <div class="form-group">
          <input type="text" name="email" placeholder="Email" required 
     class="form-control input-lg" />
          </div>
          <div class="form-group">
          <input type="password" name="password" class="form-control input- 
     lg" id="password" placeholder="Password" required="" />
          </div>
          <div class="form-group">
          <input type="password" name="password2" class="form-control input-lg" id="password2" placeholder="Confirm Password" required="" />
          </div>
          <div class="pwstrength_viewport_progress"></div>
          <button type="submit" name="submit" class="btn btn-lg btn-primary btn-block">Sign Up</button>
          <div>
            <p> Have an account :  <a href="/login">Login Here </a> </p>
          </div>
        </form>

标签: node.jsmongodb

解决方案


您快到了,但您错过了几个关键步骤:

  1. 在您可以使用路由器之前,您需要创建应用程序并使用路由器
    • 在顶部: const app = express()
    • 在底部:
      • app.use('/',路由器)
      • app.listen(3000, () => console.log('示例应用监听')
  2. 要阅读表单,您需要一个解析器
    • var bodyParser = require('body-parser')
    • app.use(bodyParser.json());
    • var urlencodedParser = bodyParser.urlencoded({extended: false })
  3. 解析器是一个中间件,所以你需要将它添加到路由中
    • router.post('/register', urlencodedParser , function(req,res){
  4. 不要忘记在console.log 之后响应浏览器,否则应用会挂起。

这是工作代码:

// users.js

var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');
const app = express();
const port = 3000;

app.use(bodyParser.json());
var urlencodedParser = bodyParser.urlencoded({ extended: false })

//Get Login
router.get('/login', function(req,res){
    res.render('userlogin');
});

//Get Register
router.get('/register', function(req,res){
    res.sendFile(__dirname+'/userregister.ejs');
});

//Post Register
router.post('/register', urlencodedParser, function(req,res){
    var nam = req.body.name;
    console.log(nam);
    res.send(nam);
});

app.use('/',router)

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

module.exports = router;

推荐阅读