Nodejs与mysql做的用户密码验证,如果想用mongoDB实现应该如何去写
Nodejs与mysql做的用户密码验证,如果想用mongoDB实现应该如何去写
var http=require(‘http’); var fs=require(‘fs’); var qs=require(‘querystring’); var mysql=require(‘mysql’);
//1.服务 var server=http.createServer(function (request, response){ var str=’’;
request.addListener('data', function (data){
str+=data;
});
request.addListener('end', function (){
var post=qs.parse(str);
if(request.url.indexOf('?')!=-1)
{
var arr=request.url.split('?');
var url=arr[0];
var get=qs.parse(arr[1]);
}
else
{
var url=request.url;
var get={};
}
if(url=='/user')
{
switch(get.act)
{
case 'add':
var db=mysql.createConnection({host: 'localhost', user: 'root', password: '', database: 'test'});
db.query("SELECT * FROM user_table WHERE username='"+get.user+"'", function (err, data){
if(err)
{
response.write('{err: 1, msg: "数据库出错"}');
response.end();
}
else
{
if(data.length>0)
{
response.write('{err: 1, msg: "用户名已存在"}');
response.end();
}
else
{
db.query("INSERT INTO user_table VALUES('"+get.user+"', '"+get.pass+"')", function (err, data){
if(err)
{
response.write('{err: 1, msg: "数据库出错"}');
response.end();
}
else
{
response.write('{err: 0, msg: "注册成功"}');
response.end();
}
});
}
}
});
break;
case 'login':
//1.连接
var db=mysql.createConnection({host: 'localhost', user: 'root', password: '', database: 'test'});
db.query("SELECT * FROM user_table WHERE username='"+get.user+"'", function (err, data){
if(err)
{
response.write('{err: 1, msg: "数据库出错"}');
response.end();
}
else
{
if(data.length==0)
{
response.write('{err: 1, msg: "此用户名不存在"}');
response.end();
}
else
{
if(data[0].password==get.pass)
{
response.write('{err: 0, msg: "登录成功"}');
response.end();
}
else
{
response.write('{err: 1, msg: "用户名或密码有误"}');
response.end();
}
}
}
});
break;
}
}
else
{
fs.readFile('www'+url, function (err, data){
if(err)
{
response.write('404');
}
else
{
response.write(data);
}
response.end();
});
}
});
}); server.listen(8080);
4 回复
要将上述使用MySQL的用户密码验证逻辑迁移到MongoDB中,我们需要做几个关键的更改。首先,我们需要安装MongoDB驱动程序mongoose
,这是一个用于处理MongoDB数据的流行库。然后,我们将修改查询和插入逻辑以适应MongoDB的数据模型。
以下是基于MongoDB的简化版本:
安装Mongoose
首先确保你已经安装了mongoose
:
npm install mongoose
修改后的代码示例
const http = require('http');
const qs = require('querystring');
const mongoose = require('mongoose');
// 初始化Mongoose连接
mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true, useUnifiedTopology: true });
// 定义User Schema
const UserSchema = new mongoose.Schema({
username: String,
password: String // 注意:在实际应用中,密码应进行哈希处理
});
const User = mongoose.model('User', UserSchema);
// 创建HTTP服务器
const server = http.createServer((request, response) => {
let str = '';
request.on('data', (data) => {
str += data;
});
request.on('end', () => {
const post = qs.parse(str);
if (request.url.indexOf('?') !== -1) {
const arr = request.url.split('?');
const url = arr[0];
const get = qs.parse(arr[1]);
} else {
const url = request.url;
const get = {};
}
if (url === '/user') {
switch (get.act) {
case 'add':
User.findOne({ username: get.user }).then(user => {
if (user) {
response.writeHead(200, { 'Content-Type': 'application/json' });
response.end(JSON.stringify({ err: 1, msg: '用户名已存在' }));
} else {
const newUser = new User({ username: get.user, password: get.pass });
newUser.save().then(() => {
response.writeHead(200, { 'Content-Type': 'application/json' });
response.end(JSON.stringify({ err: 0, msg: '注册成功' }));
}).catch(err => {
response.writeHead(200, { 'Content-Type': 'application/json' });
response.end(JSON.stringify({ err: 1, msg: '数据库出错' }));
});
}
}).catch(err => {
response.writeHead(200, { 'Content-Type': 'application/json' });
response.end(JSON.stringify({ err: 1, msg: '数据库出错' }));
});
break;
case 'login':
User.findOne({ username: get.user }).then(user => {
if (!user) {
response.writeHead(200, { 'Content-Type': 'application/json' });
response.end(JSON.stringify({ err: 1, msg: '此用户名不存在' }));
} else {
if (user.password === get.pass) {
response.writeHead(200, { 'Content-Type': 'application/json' });
response.end(JSON.stringify({ err: 0, msg: '登录成功' }));
} else {
response.writeHead(200, { 'Content-Type': 'application/json' });
response.end(JSON.stringify({ err: 1, msg: '用户名或密码有误' }));
}
}
}).catch(err => {
response.writeHead(200, { 'Content-Type': 'application/json' });
response.end(JSON.stringify({ err: 1, msg: '数据库出错' }));
});
break;
}
} else {
// 处理其他请求
}
});
});
server.listen(8080, () => {
console.log('Server running at http://localhost:8080/');
});
解释
- Mongoose连接:我们使用
mongoose.connect()
来初始化与MongoDB的连接。 - Schema定义:定义了一个简单的用户模式,包含
username
和password
字段。 - CRUD操作:使用Mongoose的方法如
findOne()
和save()
来进行查询和保存操作。 - 错误处理:所有操作都包含了基本的错误处理,确保在发生错误时能够返回适当的响应。
注意,在实际应用中,密码不应以明文形式存储,而应该使用安全的哈希算法(如bcrypt)进行加密。
建议之前去看看mongodb的数据库操作
使用MongoDB实现用户密码验证的主要步骤包括连接到MongoDB、插入新用户、验证登录信息。以下是基于Express框架和mongoose
库的简化示例代码:
安装依赖
首先确保安装了以下包:
npm install express mongoose body-parser
示例代码
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
// 连接MongoDB
mongoose.connect('mongodb://localhost:27017/mydatabase', { useNewUrlParser: true, useUnifiedTopology: true });
// 定义用户Schema
const userSchema = new mongoose.Schema({
username: String,
password: String
});
// 创建模型
const User = mongoose.model('User', userSchema);
// 用户注册
app.post('/register', async (req, res) => {
try {
const existingUser = await User.findOne({ username: req.body.username });
if (existingUser) {
return res.status(400).json({ err: 1, msg: "用户名已存在" });
}
const newUser = new User(req.body);
await newUser.save();
res.json({ err: 0, msg: "注册成功" });
} catch (error) {
res.status(500).json({ err: 1, msg: "数据库出错" });
}
});
// 用户登录
app.post('/login', async (req, res) => {
try {
const user = await User.findOne({ username: req.body.username });
if (!user) {
return res.status(400).json({ err: 1, msg: "此用户名不存在" });
}
if (user.password !== req.body.password) {
return res.status(400).json({ err: 1, msg: "用户名或密码有误" });
}
res.json({ err: 0, msg: "登录成功" });
} catch (error) {
res.status(500).json({ err: 1, msg: "数据库出错" });
}
});
app.listen(8080, () => console.log('Server running on port 8080'));
解释
- 连接数据库:使用
mongoose.connect
连接到MongoDB。 - 定义Schema:创建用户文档结构,定义字段如
username
和password
。 - 创建模型:通过
mongoose.model
创建模型。 - 处理请求:对于注册和登录请求,分别检查用户是否存在并保存或验证密码。
以上代码展示了如何从MySQL迁移到MongoDB,并使用Express和Mongoose进行基本的用户管理操作。