Nodejs mongoose + express 验证加保存
Nodejs mongoose + express 验证加保存
找了社区N遍资料,终于今天终于做好了验证跟保存,由于异步io处理方式,跟平常开发模式不同,有点不习惯。 交互方式是ajax: 前端:$("#ss").click(function(){ var params ={ name: $("#name").val(), age: $("#age").val(), like: $("#like").val() }; var s=“sdf” $.ajax({ url:"/reg",//http://127.0.0.1:3000 type:“post”, data: params,//s, dataType: ‘json’, success: function(res){ $("#ss1").html(res.data).show(); }, error: function (msg) { if ( msg.statusText == ‘timeout’ ) alert(‘网络超时’); else $("#ss1").html(“更新失败”).show();;
}
});
});
后端:就取重要的部分。
var mongoose = require(‘mongoose’);
mongoose.connect(‘mongodb://localhost/blog’);
var Users = mongoose.model(‘user’,{
name:String
,age:String
,like:String
});
var User = function(){};
User.prototype.addUser=function(req,res,i){ if(typeof i == “undefined”){ var query = Users.find(function(err,persons){ for(t in persons){ for(v in persons[t]){ if(v.toString() ==“name”){ if(persons[t][v] == req.body.name){ res.send({data:“用户名已存在,请更换一个!”}); console.log(“用户名已存在!”); return false; } } } } new User().addUser(req,res,1); }); }else{ var man = new Users({name:req.body.name,age:req.body.age,like:req.body.like}); var str ="";
man.save(function(err){
if(err){
str="系统有误";
}else{
str="保存成功";
}
res.send({data:str});
});
} } 原理:采用了回调处理,感觉这样更符合自己的逻辑,
Node.js Mongoose + Express 验证与保存
在现代的Web应用开发中,使用Node.js、Express和Mongoose来处理用户数据的验证与保存是一个常见的场景。本文将通过一个简单的示例,展示如何实现这一功能。
前端代码
前端使用jQuery来发送AJAX请求,并处理响应。以下是前端代码:
$("#ss").click(function() {
var params = {
name: $("#name").val(),
age: $("#age").val(),
like: $("#like").val()
};
$.ajax({
url: "/reg",
type: "POST",
data: JSON.stringify(params),
contentType: 'application/json',
dataType: 'json',
success: function(res) {
$("#ss1").html(res.data).show();
},
error: function(msg) {
if (msg.statusText == 'timeout') {
alert('网络超时');
} else {
$("#ss1").html("更新失败").show();
}
}
});
});
后端代码
后端使用Express和Mongoose来处理HTTP请求,并进行数据验证与保存。以下是后端代码:
const express = require('express');
const mongoose = require('mongoose');
const app = express();
app.use(express.json()); // 解析JSON格式的数据
// 连接MongoDB数据库
mongoose.connect('mongodb://localhost/blog', { useNewUrlParser: true, useUnifiedTopology: true });
// 定义Schema和Model
const userSchema = new mongoose.Schema({
name: String,
age: String,
like: String
});
const User = mongoose.model('User', userSchema);
// 处理注册请求
app.post('/reg', async (req, res) => {
const { name, age, like } = req.body;
try {
// 检查用户名是否已存在
const existingUser = await User.findOne({ name });
if (existingUser) {
return res.status(400).send({ data: '用户名已存在,请更换一个!' });
}
// 创建新的用户实例
const newUser = new User({ name, age, like });
// 保存用户信息
await newUser.save();
// 返回成功信息
res.send({ data: '保存成功' });
} catch (err) {
console.error(err);
res.status(500).send({ data: '系统有误' });
}
});
// 启动服务器
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
代码解析
-
前端:
- 使用
$.ajax
发送POST请求到/reg
路由。 - 发送的数据为JSON格式。
- 在成功回调中显示响应结果,在错误回调中处理网络超时和其他错误。
- 使用
-
后端:
- 使用
express.json()
中间件解析JSON格式的数据。 - 连接到本地的MongoDB数据库。
- 定义了一个用户模型
User
。 - 处理
/reg
路由的POST请求,首先检查用户名是否已存在,如果不存在则创建并保存新用户。 - 使用
async/await
处理异步操作,使代码更简洁易读。
- 使用
通过这种方式,我们可以有效地处理用户数据的验证与保存,并且保持代码的可读性和可维护性。
你这样的写法遇到在复杂一点的逻辑就不行了,建议还是考虑使用async库
var query = Users.find(function(err,persons){}); 应该使用条件查询: Users.find({name:name}).exec(function(err , user_){ if … else if … });
假如加上条件,那么是这样的吗? Users.find({name:name}).exec(function(err , user_){ if ? if(user_){ “有数据,已存在”; }esle{ “无数据,不存在” }
刚开始接触Nodejs,计划多写一些基础的东西,打好基础…
Node.js Mongoose + Express 验证与保存
在使用 Mongoose 和 Express 处理用户注册时,通常需要进行数据验证,确保数据格式正确,并且检查用户名是否唯一。下面是实现这一过程的完整示例。
前端代码
$("#ss").click(function() {
var params = {
name: $("#name").val(),
age: $("#age").val(),
like: $("#like").val()
};
$.ajax({
url: "/reg",
type: "POST",
data: JSON.stringify(params),
contentType: 'application/json',
dataType: 'json',
success: function(res) {
$("#ss1").html(res.data).show();
},
error: function(msg) {
if (msg.statusText === 'timeout') {
alert('网络超时');
} else {
$("#ss1").html("更新失败").show();
}
}
});
});
后端代码
首先,确保你已经安装了 express
和 mongoose
:
npm install express mongoose
然后,你可以使用以下代码来创建一个简单的注册路由:
const express = require('express');
const mongoose = require('mongoose');
const app = express();
app.use(express.json());
mongoose.connect('mongodb://localhost/blog', { useNewUrlParser: true, useUnifiedTopology: true });
const UserSchema = new mongoose.Schema({
name: { type: String, required: true, unique: true },
age: { type: String, required: true },
like: { type: String, required: true }
});
const User = mongoose.model('user', UserSchema);
app.post('/reg', async (req, res) => {
const { name, age, like } = req.body;
// 数据验证
if (!name || !age || !like) {
return res.status(400).send({ data: '所有字段都是必填项' });
}
try {
// 检查用户名是否已存在
const existingUser = await User.findOne({ name });
if (existingUser) {
return res.status(409).send({ data: '用户名已存在, 请更换一个!' });
}
// 创建新用户
const newUser = new User({ name, age, like });
await newUser.save();
res.send({ data: '保存成功' });
} catch (err) {
console.error(err);
res.status(500).send({ data: '系统有误' });
}
});
app.listen(3000, () => console.log('Server is running on port 3000'));
解释
- 前端:当用户点击按钮时,发送包含表单数据的 AJAX 请求到服务器。
- 后端:
- 连接 MongoDB 数据库。
- 定义
User
模型,并指定验证规则(例如,name
字段必须唯一)。 - 定义
/reg
路由,接收 POST 请求。 - 检查所有字段是否为空,并检查用户名是否已存在。
- 如果一切正常,则保存新用户。
通过这种方式,可以确保数据在保存之前经过验证,并且不会出现重复的用户名。