প্রকারের ত্রুটি: রাউটার.উস () এর জন্য মিডলওয়্যার ফাংশন প্রয়োজন তবে একটি বস্তু পেয়েছে


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
দয়া করে আমাদের আসল ত্রুটি বার্তাটি দেখান
thefourtheye

আমাদের কি করতে routes/indexএবং routes/usersআসতে?
বিস্ফোরণ বড়ি

1
অনির্দিষ্ট! কেউ (সম্ভবত আমি) সূচি পাতায় মডিউল.এক্সপোর্টগুলি মন্তব্য করেছে? যাইহোক আমি লাইনটি uncommented করে একটি বিভিন্ন রুট যুক্ত করেছি এবং কমপক্ষে সার্ভারটি শুরু হচ্ছে।
ডেটিস

@ ডেটাইজ - মনে হচ্ছে আপনি নিজের উত্তর হিসাবে ভুল উত্তর চিহ্নিত করেছেন
বরুণ

আমি একই ত্রুটি পেয়েছি তবে আমি
নিয়ামকটি

উত্তর:


12

যদি আপনি ২.x এর উপরে এক্সপ্রেস ব্যবহার করছেন, আপনাকে নীচের কোডের মতো অ্যাপ্লিকেশন.আউটটার ঘোষণা করতে হবে। আপনার কোড প্রতিস্থাপন করার চেষ্টা করুন

app.use('/', routes);

সঙ্গে

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

দয়া করে এখানে ক্লিক করুন app.router সম্পর্কে আরো বিবরণ পেতে

ধন্যবাদ

বিঃদ্রঃ:

app.router এক্সপ্রেস 3.0+ এ অবচয় করা হয়। আপনি যদি এক্সপ্রেস +.০+ ব্যবহার করেন তবে নীচে অনিরুধের উত্তরটি দেখুন।


10
কেবলমাত্র একটি নোট যে অ্যাপ.আউটটারটিকে অবচয় করা হয়েছে: github.com
নিক

11
এই জাতীয় বেশিরভাগ ক্ষেত্রে সর্বাধিক সমাধানের বিষয়টি নীচে @ অনিরুদের উত্তর's
geeky_monster

4
আমি এই উত্তরটি বিভ্রান্তিকর বলে মনে করেছি। আরও ভাল উত্তরটি নীচে @ অণিরুদ্ধ দ্বারা দেওয়া হয়েছে।
রোটারিডায়াল :20

নীচের উত্তরটি আরও ভাল, যেমন অন্যরা উল্লেখ করেছেন।
রেনওরাইটস

937

আপনার যে কোনও js পৃষ্ঠায় আপনি অনুপস্থিত

module.exports = router;

আপনার সমস্ত জেএস পৃষ্ঠাগুলি পরীক্ষা করুন এবং যাচাই করুন


1
@ অণিরুদ মন ত্রুটির কারণও বর্ণনা করছেন
থালা

@ অণিরুদ, ধন্যবাদ এটি সহায়ক হয়েছিল তবে এখানে কীভাবে ইএস 6 এ রাউটার রফতানি করবেন? সহজ export {router}এছাড়াও ত্রুটিটি দেয়
আদি

3
@adi stackoverflow.com/questions/38550979/... এখানে আপনি যেতে :)
Anirudh

এটি লক্ষ্য করার মতো বিষয়টি সাধারণত আপনার
জেএস

3
ভাল আমি একটি sশেষ মিস করছি : |
মুহাম্মাদ উমর

70

আপনি এক্সপ্রেস ব্যবহার করছেন এবং করছেন যদি সহজ সমাধান

const router = express.Router();

নিশ্চিত করা

module.exports = router ;

আপনার পৃষ্ঠার শেষে


এটি কি রফতানির অধীনে অন্য সম্পত্তিগুলি ওভাররাইট করে না? আমি একাধিক রফতানি করছি।
TheRealChx101

3

আমি একই ত্রুটি বার্তা পেয়েছিলাম তবে একটি ভিন্ন সমস্যা ছিল। অন্যদের জন্য পোস্ট করা যা একইভাবে আটকে আছে।

আমি বৈশিষ্ট্যসমূহ নিয়ে আসা get, post, put, deleteনতুন রাউটার ফাইলে ফাংশন যখন refactoring এবং পাথ সম্পাদনা করতে ভুলে গেছি। উদাহরণ:

ত্রুটিপূর্ণ:

//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;


অস্তিত্ব নেই এমন কোনও রুটকে রেফারেন্স করার সময় আমার অনুরূপ ত্রুটি হয়েছিল
নিয়াললজিজি

3

আপনার রুটস.জেএস ফাইলটি পরীক্ষা করুন

উদাহরণস্বরূপ আমার রুট.জেএস

    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)
      

ways.js এর শেষ চেক করুন

মডিউল.এক্সপোর্টস = রাউটার

সেখানে না থাকলে যোগ করুন এবং মডিউল.এক্সপোর্টগুলি = রাউটার আবার চালান


যদি আপনার ত্রুটিটি হয়: "TypeError: Route.post () বা Route.get () এর জন্য মিডলওয়্যার ফাংশন প্রয়োজন তবে একটি বস্তু পেয়েছে"

Goo controller.js (অর্থাত্ ব্যবহারকারীগণ নিয়ন্ত্রণকারী) এবং আপনার ভুল বানানযুক্ত সমস্ত ফাংশন নাম যাচাই করতে পারেন বা আপনি ফাংশন রুটের ফাইলটিতে দিয়েছেন কিন্তু কনটোলারগুলিতে মিস করেছেন

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: রুট.পস্ট () মিডলওয়্যার ফাংশন প্রয়োজন তবে একটি বস্তু পেয়েছে"

**


ঠিক এটাই আমি মিস করছিলাম! রফতানি বিবৃতি !!
সাইব্বিওয়েব

1

আমার এই ত্রুটি এবং সমাধান সহায়তা ছিল যা অনিরুদ্ধ পোস্ট করেছিলেন। আমি এক্সপ্রেস রাউটিংয়ের জন্য একটি টেম্পলেট তৈরি করেছি এবং এই উপদ্রবটির কথা ভুলে গিয়েছি - আনন্দিত এটি একটি সহজ সমাধান।

আমার ফাইল কাঠামোর ব্যাখ্যা দিয়ে এই কোডটি কোথায় রাখবেন সে সম্পর্কে তার উত্তরে আমি একটু স্পষ্টতা দিতে চেয়েছিলাম।

আমার সাধারণ ফাইল কাঠামোটি নিম্নরূপ:

/lib

/routes

---index.js (প্রধান নেভিগেশন নিয়ন্ত্রণ করে)

/page-one



/page-two



     ---index.js

(প্রতিটি ফাইল [আমার ক্ষেত্রে ইনডেক্স.জেজ পৃষ্ঠা-টুয়ের মধ্যে রয়েছে, যদিও পৃষ্ঠার একের একটি সূচকও রয়েছে) - প্রতিটি পৃষ্ঠার জন্য - যা শেষে app.METHODবা ব্যবহার router.METHODকরতে পারে module.exports = router;)

কেউ চাইলে আমি গিথব টেম্পলেটটিতে একটি লিঙ্ক পোস্ট করব যা সেরা অনুশীলনগুলি ব্যবহার করে এক্সপ্রেস রুটিং প্রয়োগ করে। আমাকে জানতে দাও

ধন্যবাদ অনিরুধ !!! মহান উত্তরের জন্য।


1

আপনার এই সমস্ত ফাইল পরীক্ষা করুন:

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

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

সঠিকভাবে সংরক্ষণ করুন, আমার ক্ষেত্রে একটি ফাইল মিস হয়েছে এবং একই ত্রুটি ছুঁড়েছে


0

আমার ক্ষেত্রে আমি মডিউলটি রফতানি করছিলাম না। module.exports = router;


উপরোক্ত দুটি উত্তর থেকে এটি কীভাবে পৃথক হবেmodule.exports = router;
আকিন ওকেগবাইল

ওহ, আমি নকলটির জন্য নীচে তাদের দেখতে পাচ্ছি
উসামা তাহির
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.