expressjs – 无法处理请求

我正在学习nodejs / expressjs,并将其locking到Spring MVC模式,因为我想我可以保持我的文件的凝聚力。 但是,这并不像我所期望的那样工作。

server.js

const express = require('express'); const bodyParser= require('body-parser'); const MongoClient = require('mongodb').MongoClient; const app = express(); var PeopleController = require('./controller/PeopleController.js') var db; app.all('/*', function(req, res, next) { var path = req.url; var controller; switch (true) { case /\/people.*/g.test(path): controller = new PeopleController(); console.log("people"); controller.process(req, res, next); break; case /\/foo.*/g.test(path): console.log("foo"); break default: console.log("nada"); break; } }); 

PeopleController.js

 const express = require('express'); const bodyParser= require('body-parser'); const MongoClient = require('mongodb').MongoClient; const app = express(); var PeopleController = function PeopleController() {} PeopleController.prototype.process = function (req, res, next) { var baseURL = '/people'; console.log('path is ' + req.path); app.use(bodyParser.urlencoded({extended: true})); app.set('view engine', 'ejs'); app.get(baseURL, (req, res) => { console.log('people get'); }); app.post(baseURL, (req, res) => { console.log('people post'); }); }; module.exports = PeopleController; 

然后,当我做一个GET /人/我得到以下控制台…

 people path is /people/ 

我期望app.get运行并获得以下输出:

 people path is /people/ people get 

Lurk我强烈build议使用express.router像这样:

 PeopleController.js const express = require('express'); const router = express.Router(); // then apply middleware router.use(...); // then define your endpoints router.get('/', (req, res) => { console.log('get PeopleController.js root'); } module.exports = router; 

在server.js中

 ... const PeopleController = require('./controller/PeopleController.js'); // apply PeopleController to '/people' route app.use('/people', PeopleController); 

所以现在当你请求GET / people时,你应该在节点上看到console.log。 这种方法最大的好处是可以保持代码的清洁(不需要根据路由进行切换,可以快速处理安静的操作)

这是因为您只有一个Express实例在端口上侦听。

在server.js中:

 const express = require('express'); const bodyParser= require('body-parser'); const MongoClient = require('mongodb').MongoClient; const app = express(); // we create an instance of Express ... app.listen(process.ENV.PORT); //this specific instance listening on port 

在创buildPeopleController的新实例时,您必须通过server.js中的app

 const app = express(); ... controller = new PeopleController(app); 

并在PeopleController.js中导入

 const express = require('express'); // delete this const app = express(); // delete this //add this: var PeopleController = function PeopleController(appInstance) { this.app = appInstance; } PeopleController.prototype.process = function (req, res, next) { var baseURL = '/people'; var app = this.app; console.log('path is ' + req.path); app.use(bodyParser.urlencoded({extended: true})); app.set('view engine', 'ejs'); app.get(baseURL, (req, res) => { console.log('people get'); }); app.post(baseURL, (req, res) => { console.log('people post'); }); };