express4初学时路由的一点疑问,修改代码后,只到“/”对应的页面
发布于 10 年前 作者 sannychan 15210 次浏览 最后一次编辑是 8 年前

环境:node - v0.10.29,npm-1.4.14,express-4.2.0 通过命令创建了ejs模版的工程:express -e ejs helloworld

原始代码:

app.js:

var index = require('./routes/index');
var users = require('./routes/users');
app.use('/', routes);
app.use('/users', users);

index.js

var express = require('express');
var router = express.Router();
router.get('/', function(req, res) {
  res.render('index', { title: 'Express' });
});
module.exports = router;

user.js

var express = require('express');
var router = express.Router();
router.get('/', function(req, res) {
  res.send('respond with a resource');
});
module.exports = router;

使用http://localhost:18080/,http://localhost:18080/users 分别进入不同的页面。

后面自己修改了代码,修改后关键地方如下:

app.js:

var index = require('./routes/index');
var users = require('./routes/users');
app.use('/', index.index);
app.use('/users', users.users);

index.js

exports.index = function(req, res){

    res.render('index', { title: 'Express v2' +content });
    //next();
}

users.js

exports.users = function (req, res) {
    console.log(req.session.name);
    res.render('queryPassword', { url:"http://www.baidu.com", userName: "chenshengli532", password: "aaaaa8888"});
}

不管使用哪个地址:http://localhost:18080 http://localhost:18080/users,结果都是到了"/"页面。

大家帮忙看下怎么回事,是不是第二种index.js|users.js的写法有问题,还是怎么回事,谢谢。

11 回复

我在修改后的代码里面,将app.js中路由顺序调整了一下,也能进入不同的界面,但感觉比较二。 app.js

app.use('/users', users.users);
app.use('/', index.index);

你这种写法var router = express.Router();必用 app.use 只是相当于启用 首先USE到index.js

直接res.render()出去了 res.render 内存在一个res.end res.end之后就不能第二次render ‘/user’ 了

var express = require(‘express’); var router = express.Router();

exports.index = function(req, res){ router.get(’/’, function(req, res) { res.send(‘respond with a resource’); }); }

exports.users = function (req, res) { router.get(’/user’, function(req, res) { console.log(req.session.name); res.render(‘queryPassword’, { url:“http://www.baidu.com”, userName: “chenshengli532”, password: “aaaaa8888”}); }) }

router.get(x,next)

相当于 x == req.url ?next(); :{}

像上面那样写,页面一直在请求但无相应,后面在网上查了相关资料,找到另外一种写法。

基本上,后期网站有很多路由的话,路由定义在各自的routes模块中,app.js也不会有太多的代码。不知道是否还有其他更简便的写法。 app.js

var app = express();
var index = require('./routes/index');
var users = require('./routes/users');
index(app);
users(app);

index.js

module.exports = function (app) {
    app.get('/', function (req, res) {
        res.render('index', { title: 'Express' });
    });

    app.get('/test', function (req, res) {
        console.log(req.session.name);
        res.render('queryPassword', { url: "http://www.baidu.com", userName: "chenshengli532", password: "aaaaa8888"});
    });
}

users.js

module.exports = function (app) {
    app.get('/users', function(req, res) {
        console.log(req.session.name);
        res.render('queryPassword', { url: "http://www.baidu.com", userName: "chenshengli532", password: "aaaaa8888"});
    });
}

不知道为什么我这些定义了,页面一直在请求但无服务器无响应。

user.js可以去掉。你没看懂我写法

莫非全写在app.js里面。 大一点的项目有很多路由,app.js不会爆掉么?

@sannychan 使用数据库路由表做分型。

实现手法我简单介绍下吧 app.js var routes = require(’…/route/index’); app.use(routes);

router/index.js var express = require(‘express’); var router = express.Router(); var sqlget = require(’…/conf/sql’).check;

router.get(’*’,function(req,res){ res.render(sqlget(req.url),config:{}) });

router.post(’*’,function(req,res){ res.render(sqlget(req.url),config:{}) });

module.exports = router;

渲染过程还可再做自定义 SQLGET是个同步数据库方法,如果你采用异步库,请写成异步。 数据库 URL -> VIEWS

app.use('/users', users);

请教一下 这个代码是为了实现什么?能理解为 后台系统的 入口?那在users.js该怎么写路由规则呢?

router.get('/users/username/001',function(req,res){
		 res.send('user: ' + req.params.username);
});

这样写页面该怎么命名?

@feng003 这个是访问user/ username = 001的某个用户,一般来说,是用来显示profile,命名无所谓。

回到顶部