MinSX
Novembro 11, 2019, 4:17pm
#1
Olá estou com o seguinte error, e não faço ideia por qual motivo:
TypeError: Cannot read property 'create' of undefined at UsersController.create (C:\Users\SpiriT\Documents\ProjetoWEB\backend\src\controllers\users.js:24:18) at C:\Users\SpiriT\Documents\ProjetoWEB\backend\src\routes\users.js:22:18
nesses 2 arquivos:
controllers\users.js :
const HttpStatus = require('http-status');
class UsersController {
constructor(modelUser){
this.Users = modelUser;
}
getAll(){
return this.Users
.findAll({})
.then(rs => rs)
.catch(e => e);
}
getById(params){
return this.Users
.findOne({where:params})
.then(rs=>rs)
.catch(e=>e);
}
create(data){
return this.Users
.create(data)
.then(rs=>rs)
.catch(e=>e);
}
update(data,params){
return this.Users
.update(data, {where: params})
.then(rs=>rs)
.catch(e=>e);
}
delete(params){
return this.Users
.destroy({where:params})
.then(rs=>rs)
.catch(e=>e);
}
}
module.exports = UsersController;
routes users.js:
const UsersController = require('../controllers/users')
module.exports = (app) => {
const usersController = new UsersController(app.datasource.models.users);
app.route('/users')
.get((req,res)=>{
usersController
.getAll()
.then(data => {
res.json(data);
})
.catch(error=>{
console.log(error);
res.status(400);
});
})
.post((req,res)=>{
usersController
.create(req.body)
.then(rs=>{
res.json(rs);
res.status(201);
})
.catch(error=>{
console.log(error)
res.status(422);
});
});
};
Dragoon
Novembro 11, 2019, 4:26pm
#2
MinSX:
modelUser
Dá um console.log(modelUser)
!!! O que imprime.
MinSX
Novembro 11, 2019, 4:32pm
#3
ta dando que ele não está definido : ReferenceError: modelUser is not defined
Dragoon
Novembro 11, 2019, 4:36pm
#4
Se não está passando nada então! deve estar errado o jeito que você organizou.
1 curtida
MinSX
Novembro 11, 2019, 4:37pm
#5
Eu procurei bastante e não sei onde errei :
Meu model :
module.exports = (sequelize, DataType) => {
const User = sequelize.define('tb_users', {
id: {
type: DataType.INTEGER,
primaryKey:true,
autoIncrement: true
},
name: {
type: DataType.STRING,
allowNull: false,
validate: {
notEmpty: true
}
},
email: {
type: DataType.STRING,
allowNull: false,
unique:true,
validate: {
isEmail: true,
notEmpty: true
}
},
password: {
type: DataType.STRING,
allowNull: false,
validate: {
notEmpty: true
}
}
});
return User;
};
meu router:
const UsersController = require('../controllers/users')
module.exports = (app) => {
const usersController = new UsersController(app.datasource.models.users);
app.route('/users')
.get((req,res)=>{
usersController
.getAll()
.then(data => {
res.json(data);
})
.catch(error=>{
console.log(error);
res.status(400);
});
})
.post((req,res)=>{
usersController
.create(req.body)
.then(rs=>{
res.json(rs);
res.status(201);
})
.catch(error=>{
console.log(error)
res.status(422);
});
});
};
e o meu controller:
const HttpStatus = require('http-status');
class UsersController {
constructor(modelUser){
this.Users = modelUser;
}
getAll(){
return this.Users
.findAll({})
.then(rs => rs)
.catch(e => e);
}
getById(params){
return this.Users
.findOne({where:params})
.then(rs=>rs)
.catch(e=>e);
}
create(data){
console.log('fuaehfu')
console.log('user',modelUser);
return this.Users
.create(data)
.then(rs=>rs)
.catch(e=>e);
}
update(data,params){
return this.Users
.update(data, {where: params})
.then(rs=>rs)
.catch(e=>e);
}
delete(params){
return this.Users
.destroy({where:params})
.then(rs=>rs)
.catch(e=>e);
}
}
module.exports = UsersController;
Dragoon
Novembro 11, 2019, 4:40pm
#6
mas, falta também dizer aonde você exportou a parte do (app)
?
MinSX
Novembro 11, 2019, 4:45pm
#7
acho que seria isso?:
const express = require('express');
const bodyParser = require('body-parser');
const indexRouter = require('./routes/index');
const usersRouter = require('./routes/users');
const config = require('./config/config');
const datasource = require('./config/datasource');
const app = express();
const port = 3000;
app.set('port',port);
app.config = config;
app.datasource = datasource(app);
console.log(app.config);
app.use(bodyParser.json({
limit: '5mb'
}));
indexRouter(app);
usersRouter(app);
module.exports = app;
Dragoon
Novembro 11, 2019, 4:48pm
#8
usersRouter(app);
Dá uma olhada nisso, ve se abre para passar o app
! eu acho que se não passou o app
para as routes
MinSX
Novembro 11, 2019, 4:51pm
#9
como eu faria isso? Debugando? Eu debuguei e foi para o routers
Dragoon
Novembro 11, 2019, 4:53pm
#11
complicado… porque para mim seria:
const express = require('express');
const config = require('./config/config');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;
app.set('port',port);
app.config = config;
const indexRouter = require('./routes/index')(app);
const usersRouter = require('./routes/users')(app);
const datasource = require('./config/datasource');
app.datasource = datasource(app);
app.use(bodyParser.json({
limit: '5mb'
}));
1 curtida
Dragoon
Novembro 11, 2019, 4:58pm
#12
O meu está assim:
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const todosRouter = require('./routers/todos-routers');
const usersRouter = require('./routers/users-routers');
const authRouter = require('./routers/auths-routers');
/*
* Express Server Http
*/
const app = express();
const port = process.env.PORT || 8080;
/*
* Routers Configuration
*/
const router = express.Router();
todosRouter.configuration(router);
usersRouter.configuration(router);
authRouter.configuration(router);
/*
* Middleware
*/
// const corsOptions = {
// origin: true,
// optionsSuccessStatus: 200
// }
app.use(cors());
app.options('*', cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use('/', router);
app.get('/', async (req, res) => {
res.sendFile(__dirname + '/public/index.html');
})
/*
* Listen
*/
app.listen(port, () => {
console.log(`Servidor rodando em http://localhost:${port}`)
console.log('Para derrubar o servidor: ctrl + c');
});
Rota Exemplo:
const bcrypt = require('bcrypt');
const usersModel = require('../models/users-model');
const jwt = require('../middlewares/jwt-middleware');
const { salt } = require('../auth/index');
module.exports = {
configuration: (router) => {
router.get('/api/users', jwt, (req, res, next) => {
usersModel.findAll()
.then((result) => { res.json(result) })
.catch((error) => { res.json(error) });
});
router.get('/api/user/:id?', jwt, (req, res, next) => {
const id = parseInt(req.params.id);
usersModel.findByPk(id)
.then((result) => { res.json(result) })
.catch((error) => { res.json(error) });
});
router.post('/api/user', jwt, async (req, res, next) => {
const name = req.body.name;
const email = req.body.email;
const password = bcrypt.hashSync(req.body.password, salt.value);
const app_id = req.body.app_id || null;
const active = parseInt(req.body.active) || 0;
const data = {
name,
email,
password,
app_id,
active
};
usersModel.create(data)
.then((result) => { res.json(result) })
.catch((error) => { res.json(error) });
});
router.put('/api/user/:id?', jwt, async (req, res, next) => {
const name = req.body.name;
const email = req.body.email;
let password = req.body.password;
const app_id = req.body.app_id || null;
const active = parseInt(req.body.active) || 0;
const id = parseInt(req.params.id);
let data = {
name,
email,
password,
app_id,
active
};
if (password) {
data.password = bcrypt.hashSync(req.body.password, salt.value);
} else {
delete data.password;
}
usersModel.update(data, {
where: {
id
}
})
.then((result) => { res.json(result) })
.catch((error) => { res.json(error) });
});
router.delete('/api/user/:id?', jwt, (req, res, next) => {
const id = parseInt(req.params.id);
usersModel.destroy({
where: {
id
}
})
.then((result) => { res.json(result) })
.catch((error) => { res.json(error) });
});
}
}
1 curtida
MinSX
Novembro 11, 2019, 5:18pm
#13
vlw man vou tentar fazer algo com essa rota e app,
então no caso você não fez um arquivo controller’s fez tudo já no routers ?
e essa todosRouter você poderia me mostrar?
1 curtida
Dragoon
Novembro 11, 2019, 5:51pm
#14
todosRouter
é igual ao userRouter
, nesse caso não separei com controller
1 curtida