새 Express Express 버전에서 약간의 미들웨어 변경이 있었으며이 문제에 대한 다른 게시물 중 일부에서 내 코드에서 일부 변경을 수행했지만 아무 것도 고칠 수 없습니다.
사전에 작동했지만 변경 내용을 기억할 수 없습니다.
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;
이 질문에 대한 답변은 버전 관리상의 이유로 변경되었습니다. Nik 덕분에
답변
2.x 이상의 express를 사용하는 경우 아래 코드와 같이 app.router를 선언해야합니다. 코드를 교체하십시오
app.use('/', routes);
와
app.use(app.router);
routes.initialize(app);
하시기 바랍니다 여기를 클릭 app.router에 대한 자세한 정보를 얻을 수
감사
노트 :
app.router는 express 3.0 이상에서 감가 상각됩니다. express 3.0 이상을 사용하는 경우 아래 Anirudh의 답변을 참조하십시오.
답변
귀하의 js 페이지 중 하나에서 누락되었습니다
module.exports = router;
모든 JS 페이지 확인 및 확인
답변
당신이 표현을 사용하고있는 경우 간단한 솔루션
const router = express.Router();
확인
module.exports = router ;
페이지 끝에서
답변
동일한 오류 메시지가 표시되었지만 다른 문제가있었습니다. 똑같이 붙어있는 다른 사람들을 위해 게시.
나는 포팅 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;
답변
route.js 파일을 확인하십시오
예 내 route.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)
routes.js의 끝을 확인하십시오
module.exports = 라우터
거기에 없으면 add 및 module.exports = 라우터 가 다시 실행됩니다
오류가 “TypeError : Route.post () 또는 Route.get () 인 경우
에 미들웨어 함수가 필요하지만 오브젝트가 있음”인 경우
controller.js (예 : usersController)로 이동하여 철자가 틀리거나 함수 경로 파일에 있지만 제어자가 놓친 모든 함수 이름을 확인하십시오.
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)
})
}
routes.js에서 두 개의 경로를 제공했지만 컨트롤러에서는 경로를 정의하기 위해 놓쳤습니다.
router.post ( ‘/ users / login’)
이 오류가 발생합니다 **
“TypeError : route.post ()에는 미들웨어 함수가 필요하지만 오브젝트가 있습니다”
**
답변
Anirudh가 게시 한이 오류 및 솔루션 도움말이 있습니다. 빠른 라우팅을위한 템플릿을 구축하고이 뉘앙스를 잊어 버렸습니다. 쉽게 고칠 수있었습니다.
내 파일 구조를 설명 하여이 코드를 어디에 넣을 지에 대한 그의 대답을 약간 설명하고 싶었습니다.
내 일반적인 파일 구조는 다음과 같습니다.
/lib
/routes
---index.js
(주 탐색을 제어)
/page-one
/page-two
---index.js
(각 파일 (내 경우에는 페이지 2의 index.js는 페이지 1에도 index.js가 있지만)-각 페이지마다- 마지막에 사용 app.METHOD
하거나 router.METHOD
필요로 module.exports = router;
하는)
누군가 원한다면 모범 사례를 사용하여 빠른 라우팅을 구현하는 github 템플릿에 대한 링크를 게시합니다. 알려주세요
감사합니다 Anirudh !!! 큰 답변입니다.
답변
이 파일들을 모두 확인하십시오 :
var users = require('./routes/users');
var Users = require('./models/user');
var Items = require('./models/item');
제대로 저장하십시오. 제 경우에는 하나의 파일이 누락되어 같은 오류가 발생합니다.