Diesan Romero
Diesan Romero

Reputation: 1658

Problems with the route-controller model in express

I am having a problem creating a driver for my route. For some reason it does not recognize the send() property.

This is the code of my route:

const express = require('express');
const router = express.Router();
const Ctrl = require('../controllers/index');

/* GET home page. */
router.get('/', Ctrl.list());

module.exports = router;

And this is the code of my controller:

const express = require('express');

Ctrl = {}

Ctrl.list = (req, res) => {
   res.send("sended");
}

module.exports = Ctrl;

The same happens when I use traditional functions, which are not an arrow functions.

On the other hand, this is my express configuration where the configured routes are:

const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const helmet = require('helmet');

const indexRouter = require('./routes/index');
const usersRouter = require('./routes/users');

const app = express();
require('./database/config');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(helmet());

app.use('/', indexRouter);
app.use('/users', usersRouter);

module.exports = app;

I am getting this error:

E:\elarchivero\api\controllers\index.js:6 res.send("sended"); ^

TypeError: Cannot read property 'send' of undefined at Object.Ctrl.list (E:\elarchivero\api\controllers\index.js:6:8) at Object. (E:\elarchivero\api\routes\index.js:6:22) at Module._compile (internal/modules/cjs/loader.js:959:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:995:10) at Module.load (internal/modules/cjs/loader.js:815:32) at Function.Module._load (internal/modules/cjs/loader.js:727:14) at Module.require (internal/modules/cjs/loader.js:852:19) at require (internal/modules/cjs/helpers.js:74:18) at Object. (E:\elarchivero\api\app.js:7:21) at Module._compile (internal/modules/cjs/loader.js:959:30) [nodemon] app crashed - waiting for file changes before starting...

Upvotes: 0

Views: 406

Answers (1)

C B
C B

Reputation: 417

You need to change your router to a function reference rather than a call.

router.get('/', Ctrl.list);

Upvotes: 2

Related Questions