当涉及到实现登录和注册功能时,使用 Node.js 和 Express 可以帮助您构建一个基本的身份验证系统。下面是一个重新编写的示例代码,使用了 Express、MongoDB 和 bcrypt:
首先,请确保您已经安装了 Node.js 和 npm(Node.js 包管理器),并已经在本地安装了 MongoDB。
1. 创建一个新的文件夹,并在文件夹中打开终端。
2. 初始化一个新的 Node.js 项目,运行以下命令:
```bash
npm init
```
按照提示填写项目信息,最终将生成一个 `package.json` 文件。
3. 安装所需的依赖包,运行以下命令:
```bash
npm install express mongoose bcrypt
```
4. 创建一个 `index.js` 文件,输入以下示例代码:
```javascript
const express = require('express');
const mongoose = require('mongoose');
const bcrypt = require('bcrypt');
const app = express();
const port = 3000;
// 连接到 MongoDB 数据库
mongoose.connect('mongodb://localhost/myapp', {
useNewUrlParser: true,
useUnifiedTopology: true,
});
// 创建用户模型
const UserSchema = new mongoose.Schema({
username: { type: String, required: true },
password: { type: String, required: true },
});
const User = mongoose.model('User', UserSchema);
// 配置中间件解析请求体
app.use(express.json());
// 注册路由
app.post('/api/register', async (req, res) => {
const { username, password } = req.body;
try {
// 检查用户名是否已存在
const existingUser = await User.findOne({ username });
if (existingUser) {
return res.status(400).json({ message: 'Username already exists' });
}
// 创建新用户并加密密码
const salt = await bcrypt.genSalt(10);
const hashedPassword = await bcrypt.hash(password, salt);
const newUser = new User({ username, password: hashedPassword });
await newUser.save();
res.status(201).json({ message: 'User registered successfully' });
} catch (error) {
res.status(500).json({ message: 'Registration failed' });
}
});
// 登录路由
app.post('/api/login', async (req, res) => {
const { username, password } = req.body;
try {
// 检查用户是否存在
const user = await User.findOne({ username });
if (!user) {
return res.status(404).json({ message: 'User not found' });
}
// 检查密码是否匹配
const passwordMatch = await bcrypt.compare(password, user.password);
if (!passwordMatch) {
return res.status(401).json({ message: 'Invalid password' });
}
res.status(200).json({ message: 'Login successful' });
} catch (error) {
res.status(500).json({ message: 'Login failed' });
}
});
// 启动服务器
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
```
在上述示例代码中,我们使用 Express 和 MongoDB 创建了一个简单的应用程序。我们定义了 `/api/register` 和 `/api/login` 两个路由,用于注册和登录功能。在注册路由