初学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)
app需要use一下你export出去的router。
比如在app.js文件: