CNode

express的路由问题?

问答
QQuoniamYIF发布于11 年前最后回复11 年前13 回复5182 浏览0 收藏

文件结构 ├── 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' });
}
查看回复

回复 (13)

M
MiguelValentine#1·11 年前
var router = require('./router');
......
app.use('/', router);

check this code segment

Q
QuoniamYIF#2·11 年前
引用 MiguelValentinecheck this code segment

@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);
M
MiguelValentine#3·11 年前
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);

Q
QuoniamYIF#4·11 年前
引用 MiguelValentine你想说下面这就是route.js么。 如果是,改成app.use(router);

@MiguelValentine 是router/index.js文件,为什么这样改?我就是想把路由分离到router/index.js文件下,把每个路由的回调函数封装起来,分离到router-action/index.js文件下,如果我不分离回调函数的话,程序是可以运行的,分离之后不知道为什么,调用不了routerAction.index,成GET / - - ms - -

K
klesh#5·11 年前

楼主,你的文件夹究竟是叫 router_action 还是 router-action 难道没有提示 require 失败?

Q
QuoniamYIF#6·11 年前
引用 klesh@QuoniamYIF 你说运行不成功具体是有什么出错信息吗?我照你的意思试了一下,是没有问题的,可以正常输出的。只是把 function 放到另外一个 js 文件是不影响。 routes/i...

@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' });
 }
Q
QuoniamYIF#7·11 年前
引用 leizongmin你的意思是下面的代码能正常运行: 而这样不能正常运行: 尝试打印出 routerAction.index看看是什么内容,比如:

@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' });
 }
M
MiguelValentine#8·11 年前
引用 QuoniamYIF@MiguelValentine 是router/index.js文件,为什么这样改?我就是想把路由分离到router/index.js文件下,把每个路由的回调函数封装起来,分离到router...

@QuoniamYIF 统一用route管理你的路由。用app管理中间件。

app.use('/', router);  -> app.use(router);

顺便你可以加一句moudle.exports = exports在routerAction最后。 反正你先试试,我看你的代码只有这里有坑。

K
klesh#10·11 年前
引用 QuoniamYIF@klesh router action,已更正

@QuoniamYIF 那现在问题解决了吗?还是不能正常响应?

Q
QuoniamYIF#11·11 年前
引用 klesh@QuoniamYIF 那现在问题解决了吗?还是不能正常响应?

@klesh 还没,没找到问题在哪,正在看express研究

K
klesh#12·11 年前
引用 QuoniamYIF@klesh 还没,没找到问题在哪,正在看express研究

@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' });
};
L
leizongmin#13·11 年前

你的意思是下面的代码能正常运行:

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());
参与回复
登录后即可参与回复。登录