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'); }); };