express框架(初学)

最近刚刚着手学习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;

通过这样的配置可以实现简单的文件上传、下载、删除功能,连接数据库和其他设置需要另行添加。
以上就是最近做项目的总结,希望可以帮到一些初学者。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值