最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

检查API服务调用上的重复项

IT培训 admin 6浏览 0评论

检查API服务调用上的重复项

因此,在这种情况下,我想检查数据库中已经存在的重复名称,但是我们正在使用API​​调用来呈现前端并保存表单。所以在这里我想在保存表单时检查数据库中是否已经存在该名称。如果我从名称中保存表单-如果数据库中已经存在ABC,则会显示类似已存在的错误。

let conn = null;
const constants = require('common/constants');
const db = require('common/database');
const api_respose = require('common/api_response');
const user_model = require('models/user_model');
var ObjectID = require('mongodb').ObjectID;
const audit_log = require('common/audit_log_common');

function saveCompany(company, isDelete, userId) {
    return new Promise((resolve, reject) => {
        let result = {};
        result.error = null;
        result.res = null;
        try {
            let isAdd = false;

            let useridObj = new ObjectID(userId);
            let user = conn.model(constants.collectionName.user, user_model.userSchema, constants.collectionName.user);
            user.findById(useridObj).exec(function (uerr, user) {
                if (uerr) {
                    console.error(uerr);
                    let resp = api_respose.getBadRequestResponse(process.env.WEB_URI, uerr.message);
                    resolve(resp);
                }
                var cModel = conn.model(constants.collectionNamepany, company_modelpanySchema, constants.collectionNamepany);
                if (!company._id) {
                    company.createdDate = new Date(Date.now()).toLocaleString();
                    company.createdBy = user.name;
                    isAdd = true;
                }
                company.modifiedDate = new Date(Date.now()).toLocaleString();
                company.modifiedBy = user.name;
                let id = new ObjectID(company._id);
                cModel.findById(id).exec(function (err, res) {
                    if (err) {
                        console.error(err);
                        let resp = api_respose.getBadRequestResponse(process.env.WEB_URI, err.message);
                        resolve(resp);
                    }
                    if (!res) {
                        if (isAdd) {
                            res = new cModel();
                        }
                        else {
                            result.error = "Project was not found with id: " + company._id;
                            console.error("Project was not found with id: " + company._id);
                            let resp = api_respose.getNotFoundResponse(process.env.WEB_URI, result.error);
                            resolve(resp);
                        }
                    }
                    var lean = JSON.stringify(res);

                    res.name = company.name;
                    res.is_deleted = isDelete ? true : company.is_deleted;
                    res.is_registered_for = company.is_registered_for;
                    res.registered_by= company.registered_by;
                    res.save({ lean: true }, function (tterr, update) {

                        if (tterr) {
                            console.error(tterr);
                            let resp = api_respose.getBadRequestResponse(process.env.WEB_URI, tterr.message);
                            resolve(resp);

                        }
                        if (update) {

                        if(res.name === company.name){

                        }
                            if (isAdd) {
                                audit_log.logObjectChanges({}, company, user, constants.auditLogActionpany, conn);
                            }
                            else {
                                audit_log.logObjectChanges(JSON.parse(lean), isDelete ? {} : company, user, constants.auditLogActionpany, conn);
                            }
                            result.res = update;
                            let resp = api_respose.getSuccessResponse(process.env.WEB_URI, result);
                            resolve(resp);
                        }
                    });

                });
            });
        }
        catch (e) {
            console.error(e);
            let resp = api_respose.getBadRequestResponse(process.env.WEB_URI, e.message);
            resolve(resp);
        }

    });
}
exports.handler = async (event, context, callback) => {

    if (event.httpMethod && event.httpMethod == "OPTIONS") {
        let response = api_respose.getPreflightCorsVallidation(process.env.WEB_URI, event);
        context.succeed(response);
        return;
    }
    context.callbackWaitsForEmptyEventLoop = false;
    if (!conn) {
        conn = await db.connectToDB(process.env.MONGODB_URI);
    }
  }
    var params = { company: '', isDelete: false, userId: '' };
    if (event.body) {
        let rec = JSON.parse(event.body);
        paramspany = recpany;
        params.userId = rec.userId;
        params.isDelete = rec.isDelete;
    }
    else {
        paramspany = eventpany;
        params.userId = event.userId;
        params.isDelete = event.isDelete;
    }
    let result = null; 
    result = await saveCompany(paramspany, params.isDelete, params.userId);
    console.log("Final Result on Insert: ", JSON.stringify(result));
    return result;
};

这里的参数是用户ID,数据将以JSON传递,因此当数据库中已经存在一个名称,应该显示它已经存在。我将ReactJS用于前端,使用响应状态(而非Redux)进行渲染。

回答如下:

您可以为此目的使用unique indexes:

唯一索引可确保索引字段不会存储重复值

例如,如果您在用户名上创建唯一索引:

db.test.createIndex( { "username": 1 }, { unique: true } )

如果您尝试插入重复的用户名,则会引发错误。捕获此错误将告诉您新用户名已经存在:

replset:PRIMARY> db.test.insert({username: 'abc'})
WriteResult({ "nInserted" : 1 })
replset:PRIMARY> db.test.insert({username: 'abc'})
WriteResult({
    "nInserted" : 0,
    "writeError" : {
        "code" : 11000,
        "errmsg" : "E11000 duplicate key error collection: test.test index: username_1 dup key: { username: \"abc\" }"
    }
})

[请确保您仔细阅读behaviour部分,因为它列出了与唯一索引有关的所有警告(尤其是分片群集,null值等)。

检查API服务调用上的重复项

因此,在这种情况下,我想检查数据库中已经存在的重复名称,但是我们正在使用API​​调用来呈现前端并保存表单。所以在这里我想在保存表单时检查数据库中是否已经存在该名称。如果我从名称中保存表单-如果数据库中已经存在ABC,则会显示类似已存在的错误。

let conn = null;
const constants = require('common/constants');
const db = require('common/database');
const api_respose = require('common/api_response');
const user_model = require('models/user_model');
var ObjectID = require('mongodb').ObjectID;
const audit_log = require('common/audit_log_common');

function saveCompany(company, isDelete, userId) {
    return new Promise((resolve, reject) => {
        let result = {};
        result.error = null;
        result.res = null;
        try {
            let isAdd = false;

            let useridObj = new ObjectID(userId);
            let user = conn.model(constants.collectionName.user, user_model.userSchema, constants.collectionName.user);
            user.findById(useridObj).exec(function (uerr, user) {
                if (uerr) {
                    console.error(uerr);
                    let resp = api_respose.getBadRequestResponse(process.env.WEB_URI, uerr.message);
                    resolve(resp);
                }
                var cModel = conn.model(constants.collectionNamepany, company_modelpanySchema, constants.collectionNamepany);
                if (!company._id) {
                    company.createdDate = new Date(Date.now()).toLocaleString();
                    company.createdBy = user.name;
                    isAdd = true;
                }
                company.modifiedDate = new Date(Date.now()).toLocaleString();
                company.modifiedBy = user.name;
                let id = new ObjectID(company._id);
                cModel.findById(id).exec(function (err, res) {
                    if (err) {
                        console.error(err);
                        let resp = api_respose.getBadRequestResponse(process.env.WEB_URI, err.message);
                        resolve(resp);
                    }
                    if (!res) {
                        if (isAdd) {
                            res = new cModel();
                        }
                        else {
                            result.error = "Project was not found with id: " + company._id;
                            console.error("Project was not found with id: " + company._id);
                            let resp = api_respose.getNotFoundResponse(process.env.WEB_URI, result.error);
                            resolve(resp);
                        }
                    }
                    var lean = JSON.stringify(res);

                    res.name = company.name;
                    res.is_deleted = isDelete ? true : company.is_deleted;
                    res.is_registered_for = company.is_registered_for;
                    res.registered_by= company.registered_by;
                    res.save({ lean: true }, function (tterr, update) {

                        if (tterr) {
                            console.error(tterr);
                            let resp = api_respose.getBadRequestResponse(process.env.WEB_URI, tterr.message);
                            resolve(resp);

                        }
                        if (update) {

                        if(res.name === company.name){

                        }
                            if (isAdd) {
                                audit_log.logObjectChanges({}, company, user, constants.auditLogActionpany, conn);
                            }
                            else {
                                audit_log.logObjectChanges(JSON.parse(lean), isDelete ? {} : company, user, constants.auditLogActionpany, conn);
                            }
                            result.res = update;
                            let resp = api_respose.getSuccessResponse(process.env.WEB_URI, result);
                            resolve(resp);
                        }
                    });

                });
            });
        }
        catch (e) {
            console.error(e);
            let resp = api_respose.getBadRequestResponse(process.env.WEB_URI, e.message);
            resolve(resp);
        }

    });
}
exports.handler = async (event, context, callback) => {

    if (event.httpMethod && event.httpMethod == "OPTIONS") {
        let response = api_respose.getPreflightCorsVallidation(process.env.WEB_URI, event);
        context.succeed(response);
        return;
    }
    context.callbackWaitsForEmptyEventLoop = false;
    if (!conn) {
        conn = await db.connectToDB(process.env.MONGODB_URI);
    }
  }
    var params = { company: '', isDelete: false, userId: '' };
    if (event.body) {
        let rec = JSON.parse(event.body);
        paramspany = recpany;
        params.userId = rec.userId;
        params.isDelete = rec.isDelete;
    }
    else {
        paramspany = eventpany;
        params.userId = event.userId;
        params.isDelete = event.isDelete;
    }
    let result = null; 
    result = await saveCompany(paramspany, params.isDelete, params.userId);
    console.log("Final Result on Insert: ", JSON.stringify(result));
    return result;
};

这里的参数是用户ID,数据将以JSON传递,因此当数据库中已经存在一个名称,应该显示它已经存在。我将ReactJS用于前端,使用响应状态(而非Redux)进行渲染。

回答如下:

您可以为此目的使用unique indexes:

唯一索引可确保索引字段不会存储重复值

例如,如果您在用户名上创建唯一索引:

db.test.createIndex( { "username": 1 }, { unique: true } )

如果您尝试插入重复的用户名,则会引发错误。捕获此错误将告诉您新用户名已经存在:

replset:PRIMARY> db.test.insert({username: 'abc'})
WriteResult({ "nInserted" : 1 })
replset:PRIMARY> db.test.insert({username: 'abc'})
WriteResult({
    "nInserted" : 0,
    "writeError" : {
        "code" : 11000,
        "errmsg" : "E11000 duplicate key error collection: test.test index: username_1 dup key: { username: \"abc\" }"
    }
})

[请确保您仔细阅读behaviour部分,因为它列出了与唯一索引有关的所有警告(尤其是分片群集,null值等)。

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论