0

What is wrong with my code here is my app.js file,When I hit the npm start it will give me the error like as follows :

TypeError('app.use() requires middleware functions'); 

I have used following code.

          var express = require('express');
          var path = require('path');
          var favicon = require('serve-favicon');
          var logger = require('morgan');
          var cookieParser = require('cookie-parser');
          var bodyParser = require('body-parser');
          var session = require('express-session');
          var expressValidator = require('express-validator');
          var passport = require('passport');
          var LocalStrategy = require('passport-local').Strategy;
          var multer = require('multer');
          var flash = require('connect-flash');
          var mongo = require('mongodb');
          var mongoose = require('mongoose');
          var db = mongoose.connection;


          var index = require('./routes/index');
          var users = require('./routes/users');

          var app = express();

          // view engine setup
          app.set('views', path.join(__dirname, 'views'));
          app.set('view engine', 'ejs');

          app.use(multer({
            dest: './uploads'
          }));


          // uncomment after placing your favicon in /public
          //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
          app.use(logger('dev'));
          app.use(bodyParser.json());
          app.use(bodyParser.urlencoded({
            extended: false
          }));
          app.use(session({
            secret: 'secret',
            resave: true,
            saveUninitialized: true
          }));
          app.use(passport.initialize());
          app.use(passport.session());
          app.use(expressValidator({
            errorFormatter: function(param, msg, value) {
              var namespace = param.split('.'),
                root = namespace.shift(),
                formParam = root;

              while (namespace.length) {
                formParam += '[' + namespace.shift() + ']';
              }
              return {
                param: formParam,
                msg: msg,
                value: value
              };
            }
          }));
          app.use(cookieParser());
          app.use(express.static(path.join(__dirname, 'public')));
          app.use(flash());
          app.use(function(req, res, next) {
            res.locals.messages = require('express-messages')(req, res);
            next();
          });


          app.use('/', index);
          app.use('/users', users);

          // catch 404 and forward to error handler
          app.use(function(req, res, next) {
            var err = new Error('Not Found');
            err.status = 404;
            next(err);
          });

          // error handler
          app.use(function(err, req, res, next) {
            // set locals, only providing error in development
            res.locals.message = err.message;
            res.locals.error = req.app.get('env') === 'development' ? err : {};

            // render the error page
            res.status(err.status || 500);
            res.render('error');
          });

          module.exports = app;

On console I got the following output ,

TypeError: app.use() requires middleware functions at Function.use (C:\Users\Rohit Jain\Desktop\nodjs\userloginsystem\node_modules\express\lib\application.js:210:11) at Object. (C:\Users\Rohit Jain\Desktop\nodjs\userloginsystem\app.js:27:5) at Module._compile (module.js:571:32) at Object.Module._extensions..js (module.js:580:10) at Module.load (module.js:488:32) at tryModuleLoad (module.js:447:12) at Function.Module._load (module.js:439:3) at Module.require (module.js:498:17) at require (internal/module.js:20:19) at Object. (C:\Users\Rohit Jain\Desktop\nodjs\userloginsystem\bin\www:7:11) at Module._compile (module.js:571:32) at Object.Module._extensions..js (module.js:580:10) at Module.load (module.js:488:32) at tryModuleLoad (module.js:447:12) at Function.Module._load (module.js:439:3) at Module.runMain (module.js:605:10) at run (bootstrap_node.js:425:7) at startup (bootstrap_node.js:146:9) at bootstrap_node.js:540:3

Please help me to resolve this issue.

4
  • wich line is 210 in your application? Commented Jul 31, 2017 at 8:08
  • There is no line 210 in my application this is just a fresh express app Commented Jul 31, 2017 at 8:11
  • You don't use multer the right way. The problem is on line 27 of you app.js file. You should check this thread stackoverflow.com/questions/31496100/… Commented Jul 31, 2017 at 8:12
  • @RohitJain please check the answer Commented Jul 31, 2017 at 9:05

1 Answer 1

0

You have used multer module without proper details , please check more documentation to here. Problem is that multer({dest:'./uploads/'}) return object, not middleware function.

Use following line at line number 27

app.use(multer({dest:'./uploads'}).any());

.any()

Accepts all files that comes over the wire. An array of files will be stored in req.files.

Following other options are there as follows :

  1. .single(fieldname)
  2. .array(fieldname[, maxCount])
  3. .fields(fields)
  4. .none()
  5. .any()

For more detail please check same question to here.

Hope this will help you.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.