javascript - 简单的教程代码没有从登录表单中获取数据(快速 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>
解决方案
需要解析请求正文。在您的路线上方添加此内容:
app.use(express.json());
^^^ 从头开始。只有 JSON 有效负载才需要它^^^
在您的 html 中,密码输入元素有 password="password" 而不是 name="password"。
推荐阅读
- ios - 如何调整 MTLTexture 的大小/缩放
- spring-boot - 在 Escllipse 和 Intellij 中找不到 JSP 文件创建选项
- python - 如果阻塞,OpenCv putext 不工作 inisde
- python - 将html表单中的数据作为json保存到本地文件
- html - 未找到任何参数的“用户博客”反向。尝试了 1 种模式:['pages/user/(?P
[^/]+)$'] 在 django 中 - php - 从 AJAX 调用接收到数据后,在同一网页上显示接收到的数据
- java - (表面上)相同的代码运行完全不同
- python - Python - 如何使用“打开”创建名称中带有点的文件夹(不将点解释为扩展名)?
- php - 当我使用 url 段函数时,是否有任何解决方案可以将 css 文件添加到 php 页面
- javascript - 使用电子在多个回调函数中返回值时出错