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});
});

} } 原理:采用了回调处理,感觉这样更符合自己的逻辑,


6 回复

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');
});

代码解析

  1. 前端:

    • 使用$.ajax发送POST请求到/reg路由。
    • 发送的数据为JSON格式。
    • 在成功回调中显示响应结果,在错误回调中处理网络超时和其他错误。
  2. 后端:

    • 使用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();
            }
        }
    });
});

后端代码

首先,确保你已经安装了 expressmongoose

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'));

解释

  1. 前端:当用户点击按钮时,发送包含表单数据的 AJAX 请求到服务器。
  2. 后端
    • 连接 MongoDB 数据库。
    • 定义 User 模型,并指定验证规则(例如,name 字段必须唯一)。
    • 定义 /reg 路由,接收 POST 请求。
    • 检查所有字段是否为空,并检查用户名是否已存在。
    • 如果一切正常,则保存新用户。

通过这种方式,可以确保数据在保存之前经过验证,并且不会出现重复的用户名。

回到顶部