最近刚刚着手学习node,用express框架做出了简单的请求,在这里分享一下我的学习记录。
由于我在做一个文件上传系统,所以顺便一起分享下multer模块的使用经验。
第一步:下载安装express
首先假定你已经安装了 Node.js,接下来为你的应用创建一个目录,然后进入此目录并将其作为当前工作目录。
$ mkdir myapp
$ cd myapp
通过 npm init
命令为你的应用创建一个 package.json
文件。 欲了解 package.json
是如何起作用的,请参考 Specifics of npm’s package.json handling.
$ npm init
此命令将要求你输入几个参数,例如此应用的名称和版本。 你可以直接按“回车”键接受大部分默认设置即可,下面这个除外:
entry point: (index.js)
键入 app.js
或者你所希望的名称,这是当前应用的入口文件。如果你希望采用默认的 index.js
文件名,只需按“回车”键即可。
接下来在 myapp
目录下安装 Express 并将其保存到依赖列表中。如下:
$ npm install express --save
如果只是临时安装 Express,不想将它添加到依赖列表中,可执行如下命令:
$ npm install express --no-save
npm 5.0+ 版本在默认情况下会将安装的模块添加到 package.json
文件中的 dependencies
列表中。对于较老的 npm 版本,你就必须指定 --save
参数。然后,照旧执行 npm install
命令即可自动安装依赖列表中所列出的所有模块。
以上内容摘自express官网。
第二步:配置上传文件路由
//在express的routes目录下新建一个文件项目,我的我upload.js
//项目目录/routes/upload.js
//这两个是引入express和router模块必须有
let express = require('express');
let router = express.Router();
//下面三个分别是处理文件上传、文件操作和路径管理的模块,multer需要安装其他两个node自带
let multer = require('multer');
let fs = require('fs');
let path=require('path');
//配置接受来的文件存放路径
let upload = multer({dest: 'uploads/'});
//route是引入的模块,post是请求的方法,可以是get、put、post、delete等等,upload.single('file')是我用来接受单个文件的,file是前端页面的中input的name,括号里的三个参数分别是响应和请求
router.post('/', upload.single('file'), (req, res) => {
//以下为配置后端跨域
// res.setHeader("Access-Control-Allow-Origin", "*");
// res.setHeader("Access-Control-Allow-Methods", "GET,POST");
//此处为重写文件名为原文件名,因为上传以后文件名为乱码
fs.renameSync(req.file.path,`uploads/${req.file.originalname}`);
//此处向前端发送josn对象数据
res.json({
success: '成功',
file: req.file
});
});
//没有这一行会报错
module.exports = router;
第三步:配置下载文件路由
let express = require('express');
let router = express.Router();
//引入三模块
let multer = require('multer');
let fs = require('fs');
let path = require('path');
router.get('/', (req, res, next) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Methods", "GET,POST");
//req.query.url可以获取前端传过来的参数,我的这里是url,query方法多用于解析get传来的参数
//此处为判断url是否存在,存在执行否则返回错误
req.query.url ? res.download(`uploads/${req.query.url}`) : res.json({
message: '失败'
});
});
module.exports = router;
第四步:配置删除文件路由
//项目路径route/deleteFile.js
let express = require('express');
let router = express.Router();
//还是三模块
let multer = require('multer');
let fs = require('fs');
let path = require('path');
router.post('/', (req, res, next) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Methods", "GET,POST");
//这里用的是fs模块的unlink方法删除文件,req.body.url用来获取前端post
//方法传来的参数,注:此处必须用body-parser 或者 multer中间件才可以使
//用req.body.url
fs.unlink(`uploads/${req.body.url}`, (err) => {
if(err){
res.json({
err:err,
msg:'文件不存在!'
})
} else{
res.json({
data:req.body,
message: '成功'
})
}
})
});
module.exports = router;
第五步:配置app.js入口文件
大部分都是框架自动生成的,需要自己改动的我都加了注释var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
//引入自己刚刚写的路由文件
var uploadRouter = require('./routes/upload');//上传
var downloadRouter = require('./routes/download');//下载
var deleteFileRouter = require('./routes/deleteFile')//删除
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/users', usersRouter);
//引号中是文件的url地址,后面是自己的路由变量
app.use('/upload',uploadRouter);
app.use('/download',downloadRouter)
app.use('/delete',deleteFileRouter)
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
//这里是配置服务监听8081端口,如果和自己项目冲突可以更改
app.listen(8081);
module.exports = app;
通过这样的配置可以实现简单的文件上传、下载、删除功能,连接数据库和其他设置需要另行添加。
以上就是最近做项目的总结,希望可以帮到一些初学者。