express mongdb 登录功能
时间: 2023-09-12 20:07:10 浏览: 31
可以通过以下步骤实现使用 Express 和 MongoDB 实现登录功能:
1. 安装 MongoDB 和 mongoose
```bash
npm install mongodb mongoose
```
2. 创建 MongoDB 数据库
在 MongoDB 中创建一个名为 `users` 的数据库,并在其中创建一个名为 `users` 的集合。
3. 创建用户模型
使用 mongoose 创建一个用户模型,并导出它。
```javascript
const mongoose = require('mongoose');
const UserSchema = new mongoose.Schema({
email: {
type: String,
required: true,
unique: true,
},
password: {
type: String,
required: true,
},
});
const User = mongoose.model('User', UserSchema);
module.exports = User;
```
4. 创建登录路由
在 Express 中创建一个登录路由,并在其中验证用户输入的电子邮件地址和密码。
```javascript
const express = require('express');
const router = express.Router();
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const User = require('../models/User');
router.post('/login', async (req, res) => {
const { email, password } = req.body;
try {
// 查找用户
const user = await User.findOne({ email });
if (!user) {
return res.status(400).json({ message: '无效的电子邮件地址或密码' });
}
// 验证密码
const isMatch = await bcrypt.compare(password, user.password);
if (!isMatch) {
return res.status(400).json({ message: '无效的电子邮件地址或密码' });
}
// 生成令牌
const token = jwt.sign({ userId: user._id }, process.env.JWT_SECRET);
res.json({ token });
} catch (err) {
console.error(err);
res.status(500).json({ message: '服务器错误' });
}
});
module.exports = router;
```
在上面的代码中,我们首先从请求正文中提取电子邮件地址和密码。然后,我们使用 `findOne()` 方法查找具有提供的电子邮件地址的用户。如果用户不存在,则返回一个错误响应。如果用户存在,则使用 `compare()` 方法验证提供的密码是否与数据库中存储的密码匹配。如果密码不匹配,则返回错误响应。如果密码匹配,则使用 `sign()` 方法生成 JWT 令牌,并将其作为响应发送。
5. 将路由添加到应用程序
最后,将上面的路由添加到应用程序中。
```javascript
const express = require('express');
const mongoose = require('mongoose');
const loginRouter = require('./routes/login');
const app = express();
mongoose.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
app.use(express.json());
app.use('/api', loginRouter);
app.listen(3000, () => {
console.log('服务器已启动');
});
```
在上面的代码中,我们首先连接到 MongoDB 数据库。然后,我们使用 `use()` 方法将 `loginRouter` 添加到应用程序中。最后,我们使用 `listen()` 方法启动服务器。