《node.js实战》案例—基于Express4.x框架的图片上传及下载的web应用

node.js基于Express4.x框架的图片上传及下载的web应用

    最近看了《node.js实战》一书,结合书中图片分享程序开发过程,了解基于Express框架的web应用程序开发的步骤及注意事项。node.js正在逐步的走向完善,各版本之间差异较大,在看相关书籍的时候,难免会存在书中案例与实际的出入。在此,备注下来用于日后深入学习node.js,同时也分享给和我一样对node.js感兴趣的朋友,共同进步。下面开始图片分享应用的实现。

1.安装node.js(访问官网:http://nodejs.org下载安装):安装后可在终端输入$ node命令用于测试是否安装成功,我用的是-v 0.10.33 附加了npm;

2.安装Express框架:安装命令:$ npm install -g espress-genertator@4 ,-g表示安装全局Express,该命令较之前(npm install -g express)有所不同,我安装的是4.9.0 的版本;

3.用Express构建应用程序骨架:$ express -e photo,-e(或--ejs)是指用ejs视图引擎;

4.安装应用程序的依赖:执行$ npm install命令,就会安装项目根目录下的package.json文件的配置项逐一安装,现在可以在终端输入$ node ./bin/www(或npm start)启动应用,打开浏览器输入http://localhost:3000 就可以看见配置好的应用;

5.现在根据需求在app.js中添加以下内容,并在public目录下新建photos目录,用于存放上传及下载的图片:

var photos = require('./routes/photos'); // 自定义路由模块
app.set('photos', path.join(__dirname, 'public/photos')); //图片文件夹路径

app.get('/', photos.list);
app.get('/upload', photos.form);
app.post('/upload', photos.submit(app.get('photos')));
app.get('/photo/:id/download', photos.download(app.get('photos')));
6.在routes目录先新建路由模块 photos.js 内容如下:

var Photo = require('../models/photo'); //引入Photo模型
var path = require('path');
var fs = require('fs');

//显示图片列表
exports.list = function(req, res, next){
	Photo.find({}, function(err, photos){
		if(err) return next(err);
		res.render('photos/index', {title: '图片列表', photos: photos});
	});
}

//显示表单
exports.form = function(req, res){
	res.render('photos/upload', {title: '图片上传'});
}

//上传图片
exports.submit = function(dir){
	return function(req, res, next){
		var img = req.files.photoImage;
		var name = req.body.photoName || img.name;
		
		Photo.create({name: name, path: img.name}, function(err){
			if(err) return next(err);
			res.redirect('/'); //跳转到首页
		});
	};
}

//输出/下载图片
exports.download = function(dir){
	return function(req, res, next){
		var id = req.params.id;
		Photo.findById(id, function(err, photo){ //加载图片
			if(err) return next(err);
			var download_path = path.join(dir, photo.path); //构造下载路径
			//res.sendfile(download_path); //传输文件
			res.download(download_path); //下载文件
		});
	};
}
7.本应用中选用MongoDB作为数据存储,采用node中的mongoose模块用于数据操作,因此需要安装mongoose模块$ npm install mongoose --save,其中--save是指安装最新模块,安装好之后我们开始编写图片模型,新建models目录—>photo.js文件,内容如下:

var mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/photo_app'); //连接本地photo_app数据库
var schema = new mongoose.Schema({name: String, path: String});
module.exports = mongoose.model('Photo', schema);
8.自定义路由模块需要用到对post上传文件数据的解析,因此我们添加multer模块$ npm install multer --save,之后需要在app.js文件中添加multer中间件:

app.use(multer({dest: app.get('photos')}));
9.至此,服务端主要内容已基本写好,还剩下视图部分,该部分可根据个人喜好自定义,写好之后可以打开浏览器开始测试。




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值