Проверьте наличие записи перед вставкой в ​​класс базы данных Node JS - PullRequest
1 голос
/ 18 апреля 2019

Я создал класс с функциями выбора, обновления и вставки, но я хотел бы реализовать проверку, чтобы увидеть, существует ли запись перед вставкой.Я попытался создать логику выше в функции вставки, но у меня возникли некоторые трудности со структурой и синтаксисом.Любое предложение?

'use strict';

var User = require('../model/User.js');

exports.get_User_by_id = function(req, res) {
  User.getUserById(req.params.id, function(err, User) {
    if (err)
      res.send(err);
    res.json(User);
  });
};

exports.get_User_by_User_id = function(req, res) {
  var postedBody = [req.params.User_type, req.params.User_id];
  User.getUserByIdUser(postedBody, function(err, User) {
    if (err)
      res.send(err);
    res.json(User);
  });
};

exports.add_User = function(req, res) {
	var new_User = new User(req.body);
	var postedBody = [new_User.User_type, new_User.User_id];

	User.getUserByIdUser(postedBody, function(err, User) {

	  if (err) {
	  	res.send(err);
	  } else {

	  	if (User) {
	  		res.json(User);
	  	} else {
	  		
	  		// //handles null error 
			if(!new_User.User_type || !new_User.User_id){
				res.status(400).send({ error:true, message: 'Please provide type/id' });
			}
			else{
		  
		  		User.insertUser(new_User, function(err, User) {
		    
			    if (err)
					res.send(err);
					res.json(User);
			  	});
			}
	  	}
	  }
	});    	
};

Редактировать 1: Следуя примерам naga-elixir-jar, вот мой полный код: user.js (модель)

var now = new Date();
function ISODateString(d) {
    function pad(n) {return n<10 ? '0'+n : n}
    return d.getUTCFullYear()+'-'
         + pad(d.getUTCMonth()+1)+'-'
         + pad(d.getUTCDate())+' '
         + pad(d.getUTCHours())+':'
         + pad(d.getUTCMinutes())+':'
         + pad(d.getUTCSeconds())+''
}

var User = function(User){
	this.id = User.id;
	this.User_type = User.User_type;
	this.User_id = User.User_id;
	this.created_at = ISODateString(now);
};

User.getUserByIdUser = function getUserByIdUser(body) {
  return new Promise((resolve, reject) => {
    sql.query("SELECT * FROM sb_Users WHERE User_type = ? AND User_id = ?", body, function (err, res) {             
      if(err) {
        console.log("error: ", err);
        reject(err);
      }
      else{
        resolve(res);
      }
    });   
  })
};

User.insertUser = function insertUser(newUser) {
  return new Promise((resolve, reject) => {
    sql.query("INSERT INTO sb_Users SET ?", newUser, function (err, res) {
      if(err) {
        console.log("error: ", err);
        reject(err);
      }
      else{
        resolve(res);
      }
    });   
  })
};

User.js (контроллер)

var User = require('../model/User.js');


exports.get_User_by_User_id = async function(req, res) {
  var postedBody = [req.params.User_type, req.params.User_id];

  try {
  	const User = User.getUserByIdUser(postedBody);

  	if (User.length === 0) {
  		res.json("not existent");
  	} else {
  		res.json(User);	
  	}

  } catch(e) {
  	console.error(e);
    res.json("oops! something is wrong");
  }
};




exports.add_User = async function(req, res) {
  var new_User = new User(req.body);
  var postedBody = [new_User.User_type, new_User.User_id];

  try {
    const User = await User.getUserByIdUser(postedBody);

    // I think sql returns an array of object if found or empty array otherwise if so use if (user.length === 0)
    if (User) {
      res.json(User);
    } else {
      if(!new_User.User_type || !new_User.User_id){
        res.status(400).send({ error:true, message: 'Please provide type/id' });
      } else {
        const newUser = await User.insertUser(new_User);
        res.json(newUser);
      }
    }
  } catch(e) {
    // handle error
    console.error(e);
    res.json("oops! something is wrong");
  }
};

1 Ответ

0 голосов
/ 19 апреля 2019

Вы можете использовать Promise, чтобы облегчить сложность с обратным вызовом.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 100 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *обертка над mysql, чтобы вы могли использовать эту библиотеку вместо написания своих собственных оберток обещаний.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...