首页 > 解决方案 > 简单的教程代码没有从登录表单中获取数据(快速 js)

问题描述

因此,我正在关注有关如何设置简单登录服务器的 YouTube 教程(频道名称:web dev 简化,视频:“Node.js Passport 登录系统教程”)

该代码(在视频中我处于@ 14:12 的阶段)假设在终端上控制台记录一个新注册用户的数组。

但我得到一个空数组。尽管有相同的代码(我一步一步跟着他)我没有得到新用户。我究竟做错了什么?

const path = require('path');
const fs = require('fs');
const express = require('express');
const app= express();
const bcrypt = require('bcrypt');
const session = require('express-session');
// Get express ready to setup server
var users =[];
//{id:"", name:"", email:"", password:"",}



app.set('view-engine', 'ejs')
app.use(express.urlencoded({ extended: false }));

// Sets up main page
app.get('/', (req, res) => {
 res.render('index.ejs', {name: 'Moe'})   
})

////////////////Sets up login page////////////////////////
app.get('/login', (req, res) => {
    res.render('login.ejs')   
   })
///////////////Sets up register page////////////////////////
app.get('/register', (req, res) => {
    res.render('register.ejs')   
   })
///////////////////// Recieves date from register /////////////////
app.post('/register',  async (req, res) => {
    try {
      const hashedPassword = await bcrypt.hash(req.body.password, 10)
      
      users.push({
        id: Date.now().toString(),
        name: req.body.name,
        email: req.body.email,
        password: hashedPassword
      })
      res.redirect('/login')
    } catch {
      res.redirect('/register')
    }
    console.log(users);
  });




///////////////////////////////////////////////////////




// Setup Server
app.listen(5000);

用于登录的html

<h1>Login</h1>

<form action="register" method="post">
<div>
<label for="name">username</label>
<input type="text" id="name" name="name" required>
</div>
<br>
<div>
<label for="name">password</label>
<input type="text" id="password" password="password"required>
</div>
<br>
<button type="submit">Login</button>
<br>
<a href="register">Register</a>
</form>
<br>
back to <a href="/">Homepage</a>

用于注册的html

<h1>register</h1>

<form action="register" method="POST">
<div>
<label for="name">Name</label>
<input type="text" id="name" name="name" required>
</div>
<br>
<div>
<label for="email">email</label>
<input type="email" id="email" name="email" required>
</div>
<br>
<div>
<label for="password">password</label>
<input type="password" id="password" password="password"required>
</div>
<br>
<button type="submit">Register</button>
<br>
<a href="login">Login</a>




</form>
<br>
back to <a href="/">Homepage</a>

标签: javascriptnode.jsexpress

解决方案


需要解析请求正文。在您的路线上方添加此内容: app.use(express.json()); ^^^ 从头开始​​。只有 JSON 有效负载才需要它^^^

在您的 html 中,密码输入元素有 password="password" 而不是 name="password"。


推荐阅读