मैं डेटाबेस में डेटा डालने का प्रयास करता हूं, लेकिन जब डी एंडपॉइंट कहा जाता था, तो डेटा दो बार डाला गया था।

मैं एसिंक प्रतीक्षा का उपयोग करने का प्रयास करता हूं, फ़ंक्शन के बाहर मॉडल कॉल करता हूं, वादे का उपयोग करता हूं, और समस्या हल नहीं होती है।

सम्मिलित करें:

exports.create = (req, res) => {
  let User = require('./models').User;

  User.create({
    id: 0,
    name: 'Jon',
    age: 21,
    email: 'test@gameil.com',
    city: 1
  })
  .then(result => {
    res.send(result);
  })
  .catch(error => {
    res.status(500).send(error);
  })
}

मॉडल सूचकांक:

'use strict';

const fs        = require('fs');
const path      = require('path');
const Sequelize = require('sequelize');
const basename  = path.basename(__filename);

//PRINCIPAL DATABASE CONFIG
const env = process.env.NODE_ENV || 'main';
const config = require(__dirname + '/../../configs/v1/config.json')[env];
const db = {};

if (config.use_env_variable) {
  var sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
  var sequelize = new Sequelize(config.database, config.username, config.password, config);
}

fs
  .readdirSync(__dirname)
  .filter(file => {
    return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');//open .js file
  })
  .forEach(file => {
    var model = sequelize['import'](path.join(__dirname, file));//connect data base using file model
    db[model.name] = model;//model.name example (const model = require(./model).modelName;
  });

Object.keys(db).forEach(modelName => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

आदर्श:

module.exports = function (sequelize, DataTypes) {
    let Users= sequelize.define('Users', {
        id: {
            type: DataTypes.INTEGER(11),
            allowNull: false,
            primaryKey: true
        },
        name: {
            type: DataTypes.STRING(50),
            allowNull: false
        },
        age:{
            type: DataTypes.INTEGER(11),
            allowNull: false
        },
        email:{
            type: DataTypes.STRING(256),
            allowNull: false
        },
        city:{
            type: DataTypes.INTEGER(11),
            allowNull: false
        },
  }, {
    tableName: 'users',
    timestamps: true,
    paranoid: true
  });
  Users.associate = function (models) {
        Users.belongsTo(models.Cities, { foreignKey: 'city' });
  }
  return Users;
};

मार्ग:

const controller = require('../controllers/userController');

module.exports = (router, opts, done)=>{
    router.post('/', controller.create);
    done();
}

अनुप्रयोग:

const users = require('./routes/users');

app.register(users, { prefix: '/user' });

मुझे उस क्वेरी को केवल एक डेटा डालने की ज़रूरत है, दो बार नहीं, हल करने के लिए कोई विचार?

0
Guilherme Monteiro de Oliveira 9 सितंबर 2019, 16:05

1 उत्तर

सबसे बढ़िया उत्तर

समस्या यह है:

addHook('prehandler', async(req, res, done)=>{
  done();//its wrong because use async/await
});

सही:

addHook('prehandler', async(req, res)=>{
  return
});

Async/प्रतीक्षा का उपयोग करते समय या वादा वापस करते समय किया गया कॉलबैक उपलब्ध नहीं होता है। यदि आप इस स्थिति में किए गए कॉलबैक का आह्वान करते हैं तो अप्रत्याशित व्यवहार हो सकता है, उदा। हैंडलर का डुप्लिकेट आमंत्रण।

2
Guilherme Monteiro de Oliveira 9 सितंबर 2019, 21:24