expressjs를 사용하여 제 1 프로젝트를 진행하고 있으며 장착하지 않은 라우터에 문제가 있습니다. 기본적으로 두 번째 라우터 개체를 탑재해야하는 라우터 개체를 탑재하는 응용 프로그램이 있습니다. 첫 번째 임베디드 라우터는 app.use 명령에 의해 성공적으로 마운트되지만 두 번째 레이어 임베디드 라우터는 첫 번째 임베디드 라우터에 의해 마운트되지 않습니다. 내 접근법이 왜 작동하지 않는지 말해 주려면 나보다 똑똑한 사람이 필요합니다. 모든 도움을 많이 받으실 수 있습니다.Express 라우터가 장착되지 않았습니다.
아래 프로젝트 세부 정보 및 코드를 참조하십시오. 나는 출력 다음 얻을
는 app.js
var express = require('express');
var app = express();
//path to db controller and model scripts
app.set('dbPath','/db');
//build connect string
var host='localhost'
var port='27017';
var dbName = 'Reckon_Orbs';
app.set('dbConnectString','mongodb://'+host+':'+port+'/'+dbName);
var dbRouterMod = require('./routes/db/db_router.js');
var dbRouterContainer = new dbRouterMod(express,app.get('dbPath'),app.get('dbConnectString'));
app.use('/db', dbRouterContainer.dbRouter);
// 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 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;
db_router.js
var DbRouter = function(express,dbPath,connectString) {
this.dbRouter = express.Router();
var userRouterMod = require('./user_router.js');
var userRouterContainer = new userRouterMod(express,dbPath,connectString);
//this.dbRouter.get('/user',function(req,res){res.send("hello")});
this.dbRouter.use('/user',userRouterContainer.userRouter);
console.log("db_router instantiated");
};
module.exports = DbRouter;
user_router.js
var UserRouter = function(express,dbPath,connectString){
this.userRouter = express.Router();
this.userRouter.get('/get',function(req,res){res.send("hello")});
console.log("user_router instantiated");
};
module.exports = UserRouter;
내가 노드 WWW를 사용하여 노드를 시작
하는 내 클래스가 인스턴스화되고 있음을 나타냅니다.C:\NETSHARE\data\devprojects\eclipse\Reckon_Orbs\bin>node www
user_router instantiated
db_router instantiated
Express server listening on port 3000
내가 전화했을 때 얻은 결과는 http://localhost:3000/db/user/get
입니다. 404 오류입니다. 그러나 db_router에서 주석 처리 된 코드 줄의 주석을 제거하고 http://localhost:3000/db/user
을 호출하면 응답으로 "hello"를 얻습니다. 이것은 1 층 임베디드 라우터가 잘 작동 함을 의미합니다.
을 app.js 그리고 새로운 인스턴스를 생성하고 속성으로 라우터에 액세스 할 때, 나는 또한 constru보다는 일반적인 함수를 내보내려고했다. ctor를 호출 한 다음 함수가 명시 적으로 라우터를 반환하도록해야합니다. 그런 다음 마운트 된 라우터를 사용합니다. 이것은 동일한 결과를 낳았다. db 라우터는 등록 정보를 탑재하지만 사용자 라우터는 등록 정보를 갖지 않습니다. – rss181919
앱 루트에 마운트되지 않은 라우터에 마운트 할 수 없다는 것이 문제 일까 궁금합니다. 내 예제에서, 사용자 라우터는 db 라우터가 앱 라우터에 마운트되기 전에 db 라우터에 마운트하려고 시도하고 있습니다. 나는 이것을 시험하고 결과를 제공 할 것이다. – rss181919