I have an issue with the Authenticati onController used with sequelize and sqlite When I test the POST request using postman, it always gives status 400 with the response { error: ‘Something is wrong’ } This is the log
::1 – – [21/Jul/2020:15:40:33 +0000] “POST /register HTTP/1.1” 400 30 “-” “PostmanRuntime/7.26.1”
Here is the code of AuthenticationController
const {User} = require('../models') module.exports = { async register(req, res){ try { const user = await User.create(req.body) res.send(user.toJSON()) } catch (error) { console.log(error) res.status(400).send({ error: 'Something is wrong' }) } } }
User model code
module.exports = (sequelize, DataTypes) => sequelize.define('User', { email: { type: DataTypes.STRING, unique: true }, password: DataTypes.STRING })
models index code
const fs = require('fs') const path = require('path') const Sequelize = require('sequelize') const config = require('../config/config') const db = {} const sequelize = new Sequelize( config.db.database, config.db.user, config.db.password, config.db.options ) fs .readdirSync(__dirname) .filter((file)=>{ file != 'index.js' }) .forEach((file)=>{ const model = require(path.join(__dirname, file))( sequelize, Sequelize.DataTypes ); // const model = sequelize.import(path.join(__dirname,file)) db[model.name] = model }) db.sequelize = sequelize db.Sequelize = Sequelize module.exports = db
routes code
const AuthenticationController = require('./controllers/AuthenticationController'); module.exports = (app) => { app.post('/register', AuthenticationController.register) }
Earlier, it was throwing an error of “TypeError: Cannot read property ‘create’ of undefined” But when I restarted the server, that was fixed. But I have no clues as to why the try block fails.
Anyone could throw some light on this? Thank you
Advertisement
Answer
Here is the revised code for /models/index.js
const fs = require('fs') const path = require('path') const Sequelize = require('sequelize') const config = require('../config/config') const db = {} const sequelize = new Sequelize( config.db.database, config.db.user, config.db.password, config.db.options ) fs.readdirSync(__dirname) // .filter((file) => { // file != "index.js"; // }) .filter( (file) => file.indexOf(".") !== 0 && file !== "index.js" && file.slice(-3) === ".js" ) .forEach((file) => { const model = require(path.join(__dirname, file))( sequelize, Sequelize.DataTypes ); // const model = sequelize.import(path.join(__dirname,file)) db[model.name] = model; }); db.sequelize = sequelize db.Sequelize = Sequelize module.exports = db
The filter block was updated as shown in the revised, with the help of the link https://www.codota.com/code/javascript/functions/sequelize/Sequelize/import The 2 things that were changed are
- Replaced the ‘sequelize.import’ with ‘require’
- Updated the ‘filter’ block as shown.
Thanks to crumkev for the insight which led me find the answer.