Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeError: app.use() requires middleware functions

Tags:

This is my server.js file and api.js file. I am getting an error in the sort function in which I intend to search the js objects according to their attributes.The event Schema has the attributes as name, location, price, rating. I tried to sort it according to their prices.

server.js

var express= require('express'); var bodyParser= require('body-parser'); var morgan = require('morgan'); var config=require('./config'); var app= express(); var mongoose=require('mongoose'); //var User=require('./database/user') mongoose.connect('mongodb://localhost:27017/db',function(err){     if(err){         console.log(err);     }     else{         console.log("connected!");     } });  app.use(bodyParser.urlencoded({extended: true })); //if false then parse only strings app.use(bodyParser.json()); app.use(morgan('dev'));//log all the requests to the console var api=require('./app/routes/api')(app,express); app.use('/api',api); app.get('*',function(req,res){     res.sendFile(__dirname + '/public/views/index.html'); });   // * means any route  app.listen(config.port,function(err){     if(err){enter code here         console.log(err);     }     else{         console.log("The server is running");     } }); module.exports = router; 

api.js

var User = require('../models/user'); var Event = require('../models/event'); var config = require('../../config'); var secret = config.secretKey;  module.exports = function (app, express) {     var api = express.Router();     app.use()      api.post('/signup', function (req, res) {         var user = new User({             name: req.body.name,             username: req.body.username,             password: req.body.password         });         user.save(function (err) {             if (err) {                 res.send(err);                 return;             }             res.json({                 message: 'User created!'             });         });      });      api.get('/users', function (req, res) {         User.find({}, function (err, users) {             if (err) {                 res.send(err);                 return;             }             res.json(users);         });     });      api.post('/eventfeed', function (req, res) {         var event = new Event({             name: req.body.name,             location: req.body.location,             description: req.body.description,             price: req.body.price,             rating: req.body.rating         });          event.save(function (err) {             if (err) {                 res.send(err);                 return;             }             res.json({                 message: 'Event created!'             });         });     });      // utility function for sorting an array by a key in alpha order     api.get('/sortby_price', function (err) {         if (err) return err;             // utility function for sorting an array by a key in parsed numeric order         else {             function sortArrayNum(arr, key) {                 arr.sort(function (a, b) {                     return parseInt(a[key], 10) - parseInt(b[key], 10);                 });             }              var dicts = EventSchema.saved;             for (var i = 0; i < dicts.length; i++) {                 var terms = dicts[i].terms;                 sortArrayNum(terms, "price");             }         }         return api;     }); } 

This is my error. I am making a webpage for the first time using this. Kindly help me what does this error tells.

TypeError: app.use() requires middleware functions
at EventEmitter.use (c:\Users\MY APY\WebstormProjects\Main\node_modules\express\lib\application.js:209:11)
at module.exports (c:\Users\MY LAPY\WebstormProjects\Main\app\routes\api.js:10:9)
at Object. (c:\Users\MY LAPY\WebstormProjects\Main\server.js:20:36)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:501:10)
at startup (node.js:129:16)
at node.js:814:3

like image 736
Nkav Avatar asked Oct 01 '15 09:10

Nkav


People also ask

What is middleware function?

Middleware functions are functions that have access to the request object (req), the response object (res), and the next middleware function in the application's request-response cycle. These functions are used to modify req and res objects for tasks like parsing request bodies, adding response headers, etc.

Why does node js need middleware?

The main purpose of the middleware is to modify the req and res objects, and then compile and execute any code that is required. It also helps to terminate the request-response session and call for the next middleware in the stack.

What is app use in node JS?

The app. use() method mounts or puts the specified middleware functions at the specified path. This middleware function will be executed only when the base of the requested path matches the defined path.


1 Answers

I had this problem when I left out

module.exports = router; 

in my Routes.js.We need to export all the routes.

In my server.js, I had

var mainRoutes = require('./Routes.js') app.use(mainRoutes) 

So check your 'app/routes/api' file to see if it has proper export.

like image 105
CM3 Avatar answered Oct 25 '22 17:10

CM3