nodejs 在express3.x时, 所有的router是通过 app.get('/', router.function) 实现的,
然而这种写法在express4.x上运行时会出现如下错误:
/home/ivanx/learn_node/nodejs-demo2/node_modules/express/lib/router/index.js:458
throw new TypeError('Router.use() requires middleware function but got a
^
TypeError: Router.use() requires middleware function but got a undefined
at Function.use (/home/ivanx/learn_node/nodejs-demo2/node_modules/express/lib/router/index.js:458:13)
at EventEmitter.<anonymous> (/home/ivanx/learn_node/nodejs-demo2/node_modules/express/lib/application.js:219:21)
at Array.forEach (native)
at EventEmitter.use (/home/ivanx/learn_node/nodejs-demo2/node_modules/express/lib/application.js:216:7)
at Object.<anonymous> (/home/ivanx/learn_node/nodejs-demo2/app.js:38:5)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
然而到express4.x 时,这样写总会出错,寻找资料也不知该如何搜索, 经过尝试之后, 贴一些简单对比代码出来以供参考
这里以以个简单的登陆界面为例。
首先看express3.x的实现方式。
首先建立工程, 使用express3.x 进行建立, express ejs express3_test
cd express3_test
npm install
这样 就建立好了工程
对于express3.x的实现登陆的代码如下
首先打开app.js, 添加登陆的router
app.get('/', router.index);
app.get('/login‘, router.login);
打开 router/index.js 添加如下代码
exports.index = function(req, res) {
res.render('/', {title: 'Main Page'});
}
exports.login = function(req, res) {
res.render('/login', {title: 'LOGIN’});
};
使用express4.x 建立工程,依然使用上面的代码就会提示,文章开头的错误
但是这样的代码在express4.x中会提示错误
应该按照express4.x的形式进行编写代码
建立工程,app.js 不做修改
直接进入到 router 打开index.js 做如下修改就可以了
router.get('/', function(req, res, next) {
res.render('index', { title: 'Main Page' });
});
router.get('/login', function(req, res) {
res.render('login', {title: 'use login'});
});
这样通过访问 localhost:3000/login就可以进入登陆界面了, 当然你需要把 login.ejs 编写好。
这就是一个简单变动在 3.x 升级到 4.x之后