TypeError: router.use()에 미들웨어 기능이 필요하지만 오브젝트를 취득했습니다.
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.module
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;
버전 관리상의 이유로 이 질문에 대한 답변이 변경된 것 같습니다.니키 덕분에
js 페이지 중 하나에서 누락됨
module.exports = router;
모든 JS 페이지를 확인하고 확인합니다.
express를 사용하여 작업을 수행하는 경우 심플한 솔루션
const router = express.Router();
꼭 하다
module.exports = router ;
페이지 말미에
저 같은 경우에는 모듈을 수출하지 않았습니다. module.exports = router;
를 사용하고 있는 경우express above 2.x
, 선언해야 합니다.app.router
아래 코드처럼.코드 치환을 시도해주세요.
app.use('/', routes);
와 함께
app.use(app.router);
routes.initialize(app);
app.router에 대한 자세한 내용은 여기를 클릭하십시오.
주의:
app.router
로 평가절하되다express 3.0+
express 3.0+ 를 사용하고 있는 경우는, 다음의 Anirudh 의 회답을 참조해 주세요.
라우터 내보내기 모듈이 없기 때문에 이 오류가 발생합니다.
사용하다module.exports = router;
그리고 그것은 효과가 있을 것이다.
routes.module 파일을 확인합니다.
예를 들어보겠습니다.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)
루트의 끝을 확인합니다.js
module.module = 라우터
없는 경우 add 및 module.module = 라우터를 다시 실행합니다.
에러가 "TypeError: Route.post() 또는 Route.get()은 미들웨어 함수를 필요로 하지만 오브젝트를 취득했다"인 경우
goto 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.controller에서는 2개의 루트를 지정했지만 컨트롤러에서는 루트를 정의하지 못했습니다.
router.post 사용자 / 사용자 / 사용자')
그러면 오류가 발생합니다**
"TypeError: route.post()에는 미들웨어 함수가 필요하지만 개체를 받았습니다."
**
라우터 내보내기만 하면 됩니다.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;
다음과 같은 일련의 파일을 사용했기 때문에 이 오류가 발생했습니다.
app.use('/api/someName1', someName1);
app.use('/api/someName2', someName2);
...
app.use('/api/someNameN', someNameN);
문제는 제대로 신고했는데도 파일 중 하나가 아직 비어있었다는 것입니다.다른 사람도 이런 실수를 할까 봐 그냥 두고 가는 거야.모든 사람에게 표시되는 오류 메시지와 동일한 오류 메시지가므로 다른 솔루션에 시간을 낭비하지 않도록 하기 위해
해킹을 축하합니다!
Anirudh가 올린 오류와 해결 도움말을 받았습니다.익스프레스 라우팅용 템플릿을 만들고 이 뉘앙스를 잊어버렸습니다.쉬운 수정이었으면 좋겠다고 생각했습니다.
나는 내 파일 구조를 설명함으로써 이 코드를 어디에 둘 것인가에 대한 그의 답변을 조금 더 명확하게 하고 싶었다.
일반적인 파일 구조는 다음과 같습니다.
/lib
/routes
---index.js
네비게이션을 합니다).
/page-one
/page-two
---index.js
각 내의, 1페이지에는 index.displaces, 1페이지에는 index.dislaces]-를합니다.app.METHOD
★★★★★★★★★★★★★★★★★」router.METHOD
에는 「」가 합니다.module.exports = router;
에) ★★★★★★★★★★★★★★)
필요한 경우 베스트 프랙티스를 사용하여 익스프레스 루팅을 구현하는 github 템플릿 링크를 게시합니다.알려줘
고마워 Anirudh!!!좋은 답을 위해.
다음 파일을 모두 확인합니다.
var users = require('./routes/users');
var Users = require('./models/user');
var Items = require('./models/item');
적절하게 저장하십시오. 내 경우 파일 하나가 누락되어 동일한 오류가 발생했습니다.
에는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★app.use('view engine', 'ejs');
app.set('view engine', 'ejs');
ejs
을 사용하다
였습니다.app.use(nameOfFile)
수입하다
언급URL : https://stackoverflow.com/questions/27465850/typeerror-router-use-requires-middleware-function-but-got-a-object
'programing' 카테고리의 다른 글
이행이 라라벨로 동작하도록 하려면 "composer dump-autoload" 명령을 실행해야 하는 이유는 무엇입니까? (0) | 2022.09.27 |
---|---|
Vuex 상태에서 반응형 어레이를 동적으로 생성 (0) | 2022.09.27 |
MySQL: 열이 null인 행 선택 (0) | 2022.09.27 |
각진 상태단일 페이지 애플리케이션(SPA) 전용 JS? (0) | 2022.09.27 |
열의 모든 값을 소문자로 업데이트 (0) | 2022.09.27 |