ozzyzig
ozzyzig

Reputation: 719

Error setting up simple server with middleware on node.js express

I am reasonably new to node express and am trying to set up a simple server with middleware to handle routing. The error I'm getting is TypeError: Router.use() requires a middleware function but got a Object The error is because of the app.get('/', require(routes)); line. Does anyone know what I need to put here as a middleware function?

//server.js
http = require('http');
let port = process.env.PORT || 3000;
let host = '127.0.0.1';
var express = require('express');
var app = express();
var routes = './api/routes/positions';

app.use('/', require(routes));

http.createServer(app).listen(port);
console.log('Listening at http://' + host + ':' + port);

//#########################
//positions.js
const express = require('express');
var router = express.Router();

router.get('/', (err, req, res, next) => {
    res.status(200).json({
    message: "hello from server"
    });
});

module.exports.router;

Upvotes: 1

Views: 191

Answers (3)

Raghav Garg
Raghav Garg

Reputation: 3707

You are exporting the module in wrong way from positions.js file.

you need to write

module.exports = router

instead of,

module.exports.router

What you have written will bind a new key router to exports object, but haven't assigned any value to it and hence it goes back to default the empty object {}.

Now express was expecting a function but got object and hence the error. You can verify it by checking the require(routes) in server.js file.

Update (advice)

Please study this formatted version of your code.

const http = require('http');
const express = require('express');

const routes = require('./api/routes/positions');

const port = process.env.PORT || 3000;
const host = '127.0.0.1';

const app = express();

app.use('/', routes);

http.createServer(app).listen(port);
console.log('Listening at http://' + host + ':' + port);

If you want to read more project, you can read this boilerplate written by me. It's bit old, but may serve you well.

Upvotes: 1

Siddharth Sarfale
Siddharth Sarfale

Reputation: 94

Try this one:

     //server.js
        let port = process.env.PORT || 3000;
        let host = '127.0.0.1';
        var express = require('express');
    var app = express();
    var routes = require('./api/routes/positions');

    http.createServer(app).listen(port);
    console.log('Listening at http://' + host + ':' + port);

    //#########################
    //positions.js
    const express = require('express');
    var router = express.Router();
    router.use('/', routes);
   app.use('/', routes);
    router.get('/', (err, req, res, next) => {
        res.status(200).json({
        message: "hello from server"
        });
    });

    module.exports = router;

Upvotes: 0

vishnu raj
vishnu raj

Reputation: 51

#!/usr/bin/env node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('ag:server');
var http = require('http');

/**
 * Get port from environment and store in Express.
 */

var port = normalizePort(process.env.PORT || '3002');
app.set('port', port);

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
 * Normalize a port into a number, string, or false.
 */

function normalizePort(val) {
  var port = parseInt(val, 10);

  if (isNaN(port)) {
    // named pipe
    return val;
  }

  if (port >= 0) {
    // port number
    return port;
  }

  return false;
}

/**
 * Event listener for HTTP server "error" event.
 */

function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  var bind = typeof port === 'string'
    ? 'Pipe ' + port
    : 'Port ' + port;

  // handle specific listen errors with friendly messages
  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}

/**
 * Event listener for HTTP server "listening" event.
 */

function onListening() {
  var addr = server.address();
  var bind = typeof addr === 'string'
    ? 'pipe ' + addr
    : 'port ' + addr.port;
  debug('Listening on ' + bind);
}

Upvotes: 1

Related Questions