文件结构 ├── app.js ├── bin ├── LICENSE ├── npm-debug.log ├── package.json ├── README.md ├── router │ └── index.js ├── router-action | └── index.js └── views | |___index.js
为什么以注释内的文件可以运行成功,router.get('/', routerAction.index);
这样就不成功呢?
router/index.js文件
var express = require('express'),
router = express.Router(),
routerAction = require('../router-action');
router.get('/', routerAction.index);
// router.get('/', function(req, res){
// res.render('index', {title: 'Microblog-express'});
// });
app.js文件
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 router = require('./router');
......
app.use('/', router);
router-action/index.js文件
exports.index = function(req, res){
res.render('index', { title: 'Microblog-express' });
}
@MiguelValentine 这之间也没发现什么问题?
var router = require('./router');
// var routes = require('./routes/index');
// var users = require('./routes/users');
var app = express();
// 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(express.static(path.join(__dirname, 'public')));
app.use('/', router);
app.use('/', router);
你想说下面这就是route.js么。
var express = require('express'),
router = express.Router(),
routerAction = require('../router-action');
router.get('/', routerAction.index);
// router.get('/', function(req, res){
// res.render('index', {title: 'Microblog-express'});
// });
如果是,改成app.use(router);
@MiguelValentine 是router/index.js文件,为什么这样改?我就是想把路由分离到router/index.js文件下,把每个路由的回调函数封装起来,分离到router-action/index.js文件下,如果我不分离回调函数的话,程序是可以运行的,分离之后不知道为什么,调用不了routerAction.index
,成GET / - - ms - -
。
@QuoniamYIF 统一用route管理你的路由。用app管理中间件。
app.use('/', router); -> app.use(router);
顺便你可以加一句moudle.exports = exports在routerAction最后。 反正你先试试,我看你的代码只有这里有坑。
@QuoniamYIF 你说运行不成功具体是有什么出错信息吗?我照你的意思试了一下,是没有问题的,可以正常输出的。只是把 function 放到另外一个 js 文件是不影响。
$ express test
$ cd test
$ npm install
$ vim routes/index.js
$ mkdir router-action
$ vim router-action/index.js
$ npm start
routes/index.js
var express = require('express');
var router = express.Router();
var routerAction = require('../router-action');
/* GET home page. */
//router.get('/', function(req, res, next) {
//res.render('index', { title: 'Express' });
//});
router.get('/', routerAction.index);
module.exports = router;
router-action/index.js
exports.index = function(req, res) {
res.render('index', { title: 'Microblog-express' });
};
你的意思是下面的代码能正常运行:
router.get('/', function(req, res){
res.render('index', {title: 'Microblog-express'});
});
而这样不能正常运行:
router.get('/', routerAction.index);
尝试打印出routerAction.index
看看是什么内容,比如:
router.get('/', routerAction.index);
console.log(routerAction.index.toString());
@klesh 找到问题了,我router-action/index.js是这样的,所以成空函数了,太粗心了
exports.index = function(req, res){
res.render('index', { title: 'Microblog-express' });
}
......
exports.index = function(req, res){
// res.render('index', { title: 'Microblog-express' });
}
@leizongmin 找到问题了,我router-action/index.js是这样的,所以成空函数了,太粗心了
exports.index = function(req, res){
res.render('index', { title: 'Microblog-express' });
}
......
exports.index = function(req, res){
// res.render('index', { title: 'Microblog-express' });
}