TypeError: Router.use () को मिडलवेयर फ़ंक्शन की आवश्यकता होती है, लेकिन उसे एक ऑब्जेक्ट मिला है


175

एक्सप्रेस के नए संस्करण में कुछ मिडलवेयर परिवर्तन हुए हैं और मैंने इस मुद्दे पर कुछ अन्य पोस्ट के आसपास अपने कोड में कुछ बदलाव किए हैं, लेकिन मुझे कुछ भी नहीं मिल सकता है।

हमने इसे हाथ से पहले काम किया था लेकिन मुझे याद नहीं है कि बदलाव क्या था।

throw new TypeError('Router.use() requires middleware function but got a
        ^
TypeError: Router.use() requires middleware function but got a Object

node ./bin/www

js-bson: Failed to load c++ bson extension, using pure JS version
js-bson: Failed to load c++ bson extension, using pure JS version

/Users/datis/Documents/bb-dashboard/node_modules/express/lib/router/index.js:438
      throw new TypeError('Router.use() requires middleware function but got a
            ^
TypeError: Router.use() requires middleware function but got a Object
    at /Users/datis/Documents/bb-dashboard/node_modules/express/lib/router/index.js:438:13
    at Array.forEach (native)
    at Function.use (/Users/datis/Documents/bb-dashboard/node_modules/express/lib/router/index.js:436:13)
    at /Users/datis/Documents/bb-dashboard/node_modules/express/lib/application.js:188:21
    at Array.forEach (native)
    at Function.use (/Users/datis/Documents/bb-dashboard/node_modules/express/lib/application.js:185:7)
    at Object.<anonymous> (/Users/datis/Documents/bb-dashboard/app.js:46:5)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)

app.js

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 mongoose = require('mongoose');
var session = require('express-session');
var MongoClient = require('mongodb').MongoClient;
var routes = require('./routes/index');
var users = require('./routes/users');

var Users = require('./models/user');
var Items = require('./models/item');
var Store = require('./models/store');
var StoreItem = require('./models/storeitem');

var app = express();
//set mongo db connection
var db = mongoose.connection; 

MongoClient.connect("mongodb://localhost:27017/test", function(err, db) {
  if(!err) {
    console.log("We are connected");
  }
});
// var MONGOHQ_URL="mongodb://localhost:27017/test" 

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

app.set('view engine', 'ejs');

// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(session({
    secret: 'something',
    resave: true,
    saveUninitialized: true
}));

app.use('/', routes);
app.use('/users', users);
app.use(express.static(path.join(__dirname, 'public')));

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

// Make our db accessible to our router
app.use(function(req, res, next){
  req.db = db;
  next();
});

// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
    app.use(function(err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: err
        });
    });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
        message: err.message,
        error: {}
    });
});


module.exports = app;

ऐसा प्रतीत होता है कि इस सवाल का जवाब वर्जनिंग कारणों से बदल गया है। निक को धन्यवाद


3
कृपया हमें वास्तविक त्रुटि संदेश
दिखाएं

क्या करें routes/indexऔर routes/usersवापस लौटें?
धमाका गोलियां

1
अपरिभाषित! किसी ने (शायद मुझे) सूचकांक पृष्ठ पर मॉड्यूल.एक्सपोर्ट की टिप्पणी की थी? वैसे भी मैंने लाइन को अनइंस्टॉल किया और एक var रूट जोड़ा और कम से कम सर्वर शुरू हो रहा है।
दिनांक

@Datise - लगता है कि आपने गलत उत्तर को अपने उत्तर के रूप में चिह्नित किया है
वरुण

मुझे एक ही त्रुटि मिली लेकिन मैं नियंत्रक को निर्यात करना भूल गया
डोबियन

जवाबों:


12

यदि आप 2.x से ऊपर एक्सप्रेस का उपयोग कर रहे हैं, तो आपको नीचे दिए गए कोड की तरह app.router घोषित करना होगा। कृपया अपने कोड को बदलने का प्रयास करें

app.use('/', routes);

साथ में

app.use(app.router);
routes.initialize(app);

App.router के बारे में अधिक जानकारी प्राप्त करने के लिए कृपया यहां क्लिक करें

धन्यवाद

ध्यान दें:

app.router एक्सप्रेस 3.0+ में मूल्यह्रास किया गया है। यदि आप एक्सप्रेस 3.0+ का उपयोग कर रहे हैं, तो नीचे अनिरुद्ध के उत्तर को देखें।


10
बस एक नोट है कि app.router पदावनत किया गया है: github.com/strongloop/express/wiki/Migrating-from-3.x-to-4.x
Nik

11
ऐसे अधिकांश मामलों के लिए सबसे अधिक संभावना है, नीचे @ अनिरुद्ध का जवाब है।
geeky_monster

4
मुझे यह उत्तर भ्रामक लगा। बेहतर उत्तर नीचे @Airirudh द्वारा दिया गया है।
रोटरी

नीचे दिए गए उत्तर बेहतर हैं, जैसा कि दूसरों ने उल्लेख किया है।
राणेवेराइट्स

938

आपके किसी भी js पृष्ठ में आप गायब हैं

module.exports = router;

अपने सभी जेएस पेजों की जांच और सत्यापन करें


1
@Anirudh मन के साथ-साथ त्रुटि के लिए कारण का वर्णन
थैली दहल

@ अनिरुद्ध, धन्यवाद यह सहायक था लेकिन ईएस 6 में यहां राउटर कैसे निर्यात किया जाए? सरल export {router}भी है कि त्रुटि देता है
आदि

3
@adi stackoverflow.com/questions/38550979/… आप यहाँ जाएँ :)
अनिरुद्ध

वर्थ नोटिंग यह आमतौर पर आप के js पेज के अंत में होता है
एंड्रयूलेओनार्डी

3
अच्छी तरह से मैं एक sअंत में याद आ रही थी : |
मुहम्मद उमर

70

सरल समाधान यदि आपका एक्सप्रेस और कर रहे हैं

const router = express.Router();

यह सुनिश्चित कर लें

module.exports = router ;

अपने पृष्ठ के अंत में


क्या यह निर्यात के तहत अन्य संपत्तियों को अधिलेखित नहीं करता है? मैं कई निर्यात कर रहा हूँ।
TheRealChx101

3

मुझे एक ही त्रुटि संदेश मिल रहा था लेकिन एक अलग मुद्दा था। दूसरों के लिए पोस्टिंग जो उसी पर अटक जाती है।

मैं पोर्ट get, post, put, deleteनई रूटर फाइल करने के लिए काम करता है, जबकि पुनर्रचना, और रास्तों को संपादित करने की भूल गया। उदाहरण:

गलत:

//server.js
app.use('/blog-posts', blogPostsRouter);

//routers/blogPostsRouter.js
router.get('/blog-posts', (req, res) => {
  res.json(BlogPosts.get());
});

सही बात:

//server.js
app.use('/blog-posts', blogPostsRouter);

//routers/blogPostsRouter.js
router.get('/', (req, res) => {
  res.json(BlogPosts.get());
});

कुछ समय के लिए हाजिर हो गया, क्योंकि त्रुटि ने मुझे वाक्यविन्यास की जाँच की जहाँ मैं किसी ऑब्जेक्ट में एक तर्क लपेट रहा था या जहाँ मैं चूक गया था module.exports = router;


जब मैं मौजूद नहीं था, तो मैंने इसी तरह की त्रुटि का उल्लेख किया था
NiallJG

3

अपने path.js फ़ाइल की जाँच करें

मेरे मार्गों का उदाहरण दें

    const express = require('express')
    const router = express.Router()
    
    const usersController = require('../app/controllers/usersController')
    const autheticateuser = require('../app/middlewares/authentication')
    
    router.post('/users/login', autheticateuser, usersController.login)
    router.post('/users/register', autheticateuser, usersController.register)
      

मार्गों की जाँच करें

मॉड्यूल.एक्सपोर्ट्स = राउटर

अगर वहाँ नहीं जोड़ और मॉड्यूल .exports = रूटर फिर से चलाते हैं


यदि आपकी त्रुटि है: "TypeError: Route.post () या Route.get () को मिडलवेयर फ़ंक्शन की आवश्यकता होती है लेकिन एक ऑब्जेक्ट"

गोटो नियंत्रक.जेएस (यानी, यूजर्सकंट्रोलर) और उन सभी फ़ंक्शन नामों की जांच करें जिन्हें आप गलत तरीके से छोड़ सकते हैं, या आपने फ़ंक्शन रूट फ़ाइल में दिए हैं, लेकिन कॉनोलर्स में चूक गए हैं

const User = require('../models/user')
const express = require('express')
const router = express.Router()



module.exports.register = (req, res) => {
    const data = req.body
    const user = new User(data)
    user.save()
        .then((user) => {
            res.send(user)
        })
        .catch((err) => {
            res.json(err)
        })
}

मार्गों में। मैं दो मार्गों दिया, लेकिन नियंत्रकों में मैं के लिए मार्ग को परिभाषित करने से चूक गया

router.post ( '/ उपयोगकर्ताओं / लॉगिन')

इससे त्रुटि हो जाएगी **

"TypeError: path.post () को मिडलवेयर फ़ंक्शन की आवश्यकता होती है, लेकिन एक ऑब्जेक्ट मिला"

**


बस यही मुझे याद आ रहा था! निर्यात विवरण !!
साबीब्वेब

1

मेरे पास यह त्रुटि और समाधान सहायता थी जो अनिरुद्ध द्वारा पोस्ट की गई थी। मैंने एक्सप्रेस रूटिंग के लिए एक टेम्पलेट बनाया और इस बारीकियों के बारे में भूल गया - खुशी है कि यह एक आसान तय था।

मैं उनके जवाब को थोड़ा स्पष्ट करना चाहता था कि मेरी फाइल संरचना को समझाकर यह कोड कहां रखा जाए।

मेरी विशिष्ट फ़ाइल संरचना इस प्रकार है:

/lib

/routes

---index.js (मुख्य नेविगेशन को नियंत्रित करता है)

/page-one



/page-two



     ---index.js

(प्रत्येक फ़ाइल [मेरे मामले में पेज-दो के भीतर index.js, हालांकि पृष्ठ-एक एक index.js भी होता है] - प्रत्येक पृष्ठ के - का उपयोग करता है कि app.METHODया router.METHODजरूरतों के लिए module.exports = router;अंत में)

अगर कोई चाहता है कि मैं github टेम्पलेट के लिए एक लिंक पोस्ट करूं जो सर्वोत्तम प्रथाओं का उपयोग करके रूटिंग एक्सप्रेस को लागू करता है। मुझे बताएं

धन्यवाद अनिरुद्ध !!! शानदार जवाब के लिए।


1

इन सभी फ़ाइल को देखें:

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

var Users = require('./models/user');
var Items = require('./models/item');

ठीक से सहेजें, मेरे मामले में, एक फ़ाइल चूक गई थी और उसी त्रुटि को फेंक रही थी


0

मेरे मामले में मैं मॉड्यूल निर्यात नहीं कर रहा था। module.exports = router;


ऊपर दिए गए दो जवाबों से यह कैसे अलग हैmodule.exports = router;
अकिन ओकेबेलाइल

ओह, मैं उन्हें नकल के लिए नीचे खेद में देख सकता हूं
उस्मा ताहिर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.