CNode

[help]express 的 res.redirect('..') 不会返回到上一级目录?

Ffancyboynet发布于12 年前最后回复12 年前15 回复10648 浏览0 收藏

完整的routes/users.js:

var express = require('express');
var router = express.Router();
var myMongoose = _require('myMongoose');
var User = myMongoose.getModel('user');
var getUsers = function (callback) {
  User.find(function (err, users) {
    if (err) {
      throw err;
    }
    callback && callback(users);
  });
};
var addUser = function (user, callback) {
  var data = new User(user);
  data.save(function (err) {
    if (err) {
      throw err;
    }
    callback && callback();
  });
};
/* GET users listing. */
router.get('/', function (req, res) {
  getUsers(function (users) {
    res.render('users', { title: 'users', users: users });
  });
});
router.get('/add', function (req, res) {
  res.render('users_add', { title: 'addUser' });
});
router.post('/add', function (req, res) {
  if (!req.body.name) {
    res.send('name is required');
    return;
  }
  if (!req.body.password) {
    res.send('password is required');
    return;
  }
  if (!req.body.sex) {
    res.send('sex is required');
    return;
  }
  addUser(req.body, function () {
    res.redirect('..');
  });
});
module.exports = router;

我的当前目录是/users/add,处理一个post请求,添加完成后我希望返回到/users目录,显示所有的用户,但是跳回首页去了

补充下,我其实说的就是url,不是目录,我post的页面是http://localhost:3000/users/add 提交后,我希望能跳转回http://localhost:3000/users

不知道是不是我哪里写的有问题,感觉这里的路径都是相对users/的,也就是app.js里定义的

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

我把重定向写成这面的形式,可以达到我返回上一级路径的目的,不过总觉得有点拙

res.redirect('add/..');
查看回复

回复 (15)

R
ravenwang#1·12 年前

不要看当前目录,看实际url

I
icarusysuper#2·12 年前

认真看文档

F
fancyboynet#4·12 年前
引用 icarusysuper认真看文档

@hzbqjltx 求指点迷津

K
klamtlne#5·12 年前

return res.redirect('back');

F
fancyboynet#6·12 年前
引用 klamtlnereturn res.redirect('back');

@klamtlne 这个提交后还是停留在http://localhost:3000/users/add 页面

I
icarusysuper#7·12 年前
引用 icarusysuper认真看文档

@fancyboynet addUser函数怎么触发的,给出上下文看下。

F
fancyboynet#8·12 年前
引用 icarusysuper认真看文档

@hzbqjltx 我做了修改,你看看

R
ravenwang#9·12 年前

你post的时候路径是/add,redirect('..')就到了/

F
fancyboynet#10·12 年前
引用 ravenwang你post的时候路径是/add,redirect('..')就到了/

@ravenwang post时候的路径不是相对/users的么,也就是说实际应该是http://localhost:3000/users/add
你的意思是我实际是提交到http://localhost:3000/add 去了?

R
ravenwang#11·12 年前
引用 ravenwang你post的时候路径是/add,redirect('..')就到了/

@fancyboynet router是怎么定义的?你还是把完整的代码贴一下吧

F
fancyboynet#12·12 年前
引用 ravenwang你post的时候路径是/add,redirect('..')就到了/

@ravenwang 已添加,你看看 var users = require('./routes/users'); 是express 默认生成的

R
ravenwang#13·12 年前
引用 ravenwang你post的时候路径是/add,redirect('..')就到了/

@fancyboynet 没看出什么问题,你检查下req.path的值是什么吧

I
icarusysuper#14·12 年前
引用 icarusysuper认真看文档

@fancyboynet redirect('/')

F
fancyboynet#15·12 年前
引用 icarusysuper认真看文档

@hzbqjltx 不行我试过了,这个是直接跳到根目录的,你们都好的?

参与回复
登录后即可参与回复。登录