下面我来详细讲解利用node.js+mongodb如何搭建一个简单登录注册的功能的攻略。
基本流程
首先,我们需要搭建node.js的环境,安装对应的依赖包,包括MongoDB、Express等。然后,我们可以创建一个项目,创建一个包含login和register两个路由的express应用。在处理控制器中,我们可以使用mongoose库来操作mongodb数据库,实现对用户的信息存储、传递和验证。
以下是一个简单的用户Schema示例:
const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');
const UserSchema = new mongoose.Schema({
username: {
type: String,
required: true,
unique: true
},
password: {
type: String,
required: true
}
});
UserSchema.pre('save', function(next) {
const user = this;
bcrypt.hash(user.password, 10, function(err, hash) {
if (err) {
return next(err);
}
user.password = hash;
next();
});
});
UserSchema.methods.comparePassword = function(candidatePassword, cb) {
bcrypt.compare(candidatePassword, this.password, function(err, isMatch) {
if (err) {
return cb(err);
}
cb(null, isMatch);
});
}
module.exports = mongoose.model('User', UserSchema);
在这个Schema中,我们定义了username和password两个字段,并使用bcrypt库对密码进行hash加密。同时,我们还定义了comparePassword方法验证用户输入的密码和数据库中的密码是否匹配。
在用户注册时,我们可以使用以下代码来将用户信息保存到数据库:
const user = new User({
username: req.body.username,
password: req.body.password
});
user.save(function(err) {
if (err) {
return next(err);
}
res.json({'message': 'User successfully created'});
});
在用户登录时,我们可以使用以下代码检验用户信息:
User.findOne({ username: req.body.username }, function(err, user) {
if (err) {
return next(err);
}
if (!user) {
return res.status(401).send('Invalid username or password');
}
user.comparePassword(req.body.password, function(err, isMatch) {
if (isMatch && !err) {
// 密码匹配,登录成功
} else {
// 密码不匹配,登录失败
}
});
});
示例说明
接下来,我将给出两个示例说明来帮助您更全面地了解如何搭建简单登录注册功能。
示例一:使用Express搭建登录注册功能
该示例中,我将使用Express框架来构建一个简单的应用程序,实现用户的登录和注册功能。具体步骤如下:
- 安装依赖和库
首先,我们需要安装必要的依赖和库,包括:Express、mongoose、bcryptjs等。可以通过以下命令进行安装:
npm install express mongoose bcryptjs --save
- 创建应用程序
接下来,我们创建一个名为app.js的文件,并在其中导入必要的库,以及创建express应用程序:
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const bcrypt = require('bcryptjs');
const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
- 创建数据库模型和路由处理器
在app.js文件中,我们需要创建数据库模型和路由处理器。首先,我们创建用户模型:
const userSchema = new mongoose.Schema({
username: {type: String, unique: true},
password: String
});
userSchema.pre('save', function(next) {
const user = this;
if (!user.isModified('password')) return next();
bcrypt.genSalt(10, function(err, salt) {
if(err) return next(err);
bcrypt.hash(user.password, salt, function(err, hash) {
if(err) return next(err);
user.password = hash;
next();
});
});
});
userSchema.methods.comparePassword = function(candidatePassword, cb) {
bcrypt.compare(candidatePassword, this.password, function(err, isMatch) {
if(err) return cb(err);
cb(null, isMatch);
});
};
const User = mongoose.model('User', userSchema);
接下来,我们定义注册和登录的路由处理器:
// 注册
app.post('/api/register', function(req, res) {
const user = new User({
username: req.body.username,
password: req.body.password
});
user.save(function(err) {
if (err) {
res.json({success: false, message: err.message});
} else {
res.json({success: true});
}
});
});
// 登录
app.post('/api/login', function(req, res) {
User.findOne({ username: req.body.username }, function(err, user) {
if (err) {
return done(err);
}
if (!user) {
res.json({success: false, message: 'User not found.'});
} else {
user.comparePassword(req.body.password, function(err, isMatch) {
if (isMatch && !err) {
res.json({success: true, message: 'Auth succeeded.'});
} else {
res.json({success: false, message: 'Auth failed.'});
}
});
}
});
});
- 启动应用程序
最后,我们启动应用程序,开始监听请求:
mongoose.connect('mongodb://localhost:27017/login-demo', { useNewUrlParser: true }, function(err, db) {
if(err){
console.log('Unable to connect to the server. Please start the server. Error:', err);
} else {
console.log('Connected to Server successfully!');
}
});
app.listen(3000, ()=>{
console.log('Server started on port 3000...');
});
示例二:使用koa2搭建登录注册功能
该示例中,我将使用koa2框架来构建一个简单的应用程序,实现用户的登录和注册功能。具体步骤如下:
- 安装依赖和库
首先,我们需要安装必要的依赖和库,包括:koa、koa-router、mongoose、bcrypt等。可以通过以下命令进行安装:
npm install koa koa-router mongoose bcrypt --save
- 创建应用程序
接下来,我们创建一个名为app.js的文件,并在其中导入必要的库,以及创建koa应用程序:
const Koa = require('koa');
const router = require('koa-router')();
const mongoose = require('mongoose');
const bodyParser = require('koa-bodyparser');
const bcrypt = require('bcrypt');
const app = new Koa();
app.use(bodyParser());
- 创建数据库模型和路由处理器
在app.js文件中,我们需要创建数据库模型和路由处理器。首先,我们创建用户模型:
const userSchema = new mongoose.Schema({
username: {type: String, unique: true},
password: String
});
userSchema.pre('save', function(next) {
const user = this;
if (!user.isModified('password')) return next();
bcrypt.genSalt(10, function(err, salt) {
if(err) return next(err);
bcrypt.hash(user.password, salt, function(err, hash) {
if(err) return next(err);
user.password = hash;
next();
});
});
});
userSchema.methods.comparePassword = function(candidatePassword, cb) {
bcrypt.compare(candidatePassword, this.password, function(err, isMatch) {
if(err) return cb(err);
cb(null, isMatch);
});
};
const User = mongoose.model('User', userSchema);
接下来,我们定义注册和登录的路由处理器:
// 注册
router.post('/api/register', async function(ctx, next) {
const user = new User({
username: ctx.request.body.username,
password: ctx.request.body.password
});
await user.save().then(()=>{
ctx.response.body = {success: true};
}).catch((err)=>{
ctx.response.body = {success: false, message: err.message};
});
});
// 登录
router.post('/api/login', async function(ctx, next) {
const user = await User.findOne({ username: req.body.username }).exec();
if (!user) {
ctx.response.body = {success: false, message: 'User not found.'};
} else {
user.comparePassword(ctx.request.body.password, function(err, isMatch) {
if (isMatch && !err) {
ctx.response.body = {success: true, message: 'Auth succeeded.'};
} else {
ctx.response.body = {success: false, message: 'Auth failed.'};
}
});
}
});
- 启动应用程序
最后,我们启动应用程序,开始监听请求:
mongoose.connect('mongodb://localhost:27017/login-demo', { useNewUrlParser: true }, function(err, db) {
if(err){
console.log('Unable to connect to the server. Please start the server. Error:', err);
} else {
console.log('Connected to Server successfully!');
}
});
app.use(router.routes());
app.listen(3000, ()=>{
console.log('Server started on port 3000...');
});
到此为止,我们就完成了使用node.js+mongodb搭建一个简单登录注册的功能详解。希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用node.js+mongodb如何搭建一个简单登录注册的功能详解 - Python技术站