请问express的post请求如何带参数

初学Node.js,参考《Node.js实战》在做一个图片上传的网站。教程比较久,有些地方我照着express最新版本里面的使用方式改了下。比如:
原本他的路由是这样的:
app.js

app.set('photos', __dirname + '/public/photos');
....
app.get('/', photos.list);
app.get('/upload', photos.form);
app.post('/upload', photos.submit(app.get('photos')));

routes/photo.js

exports.form = function(req, res){
  res.render('photos/upload', {
    title: 'Photo upload' 
  });
};

exports.submit = function (dir) {
  return function(req, res, next){
    var img = req.files.photo.image;
    var name = req.body.photo.name || img.name;
    var path = join(dir, img.name);

    fs.rename(img.path, path, function(err){
      if (err) return next(err);

      Photo.create({
        name: name,
        path: img.name
      }, function(err) {
        if (err) return next(err);
        res.redirect('/');
      });
    });
  };
};

然后我这样改了
app.js

app.set('photos', __dirname + '/public/photos');
....
app.use('/', photos);
app.use('/upload',photos)
app.post('/upload',photos)//问题在这里不知道怎么传参数

routes/photo.js

var express = require('express');
var router = express.Router();
......
router.get('/', function(req, res, next) {
    res.render('photos',{
        title:'photos',
        photos: photos
    });
});

router.get('/upload',function(req, res, next){
    res.render('photos/upload', {
    title: 'Photo upload' 
  });
})
router.post('/upload',function(dir){
    console.log(dir)
    return function(req,res,next){
        var img = req.files.photo.image;
        var name = req.body.photo.name || img.name;
        var path = join(dir, img.name);
        console.log(1)
        fs.rename(img.path, path, function(err){
          if (err) return next(err);
        console.log(2)

          Photo.create({
            name: name,
            path: img.name
          }, function(err) {
            if (err) return next(err);
            res.redirect('/');
          });
        });
    }
})
.......
module.exports=router;

虽然暂时还不知道两种exports的区别= =,但是我按照框架生成的内容仿照着改可行,但是,post方式的那个dir参数在app.js不知道该如何传过去。

app.post('/upload',photos)
阅读 3.8k
1 个回答

app需要use一下你export出去的router。
比如在app.js文件:

var photoRouter = require('photo'); //假设两个在同一个路径下
...

app.use(photoRouter);

...
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题