基于express的bodyParser() 解析请求体实现文件上传功能

基于express的bodyParser() 解析请求体实现文件上传功能

一个完整的博客怎么能缺少图片呢?现在,我们来给博客添加文件上传功能,这样我们就可以使用 markdown 来链接图片了。

上传文件目前有三种方法:

  • 使用 Express 自带的文件上传功能,不涉及数据库

  • 使用 Formidable 外部模块,不涉及数据库

  • 上传到 MongoDB ,涉及数据库

第一个方法最简单,所以我们就用第一个来实现我们想要的功能吧。Express 通过 bodyParser() 解析请求体,我们可以使用 bodyParser() 来实现上传文件的功能,其实 bodyParser() 内部就是使用了 formidable ,只不过多了一层封装而已。

打开 header.ejs ,在 <span><a title="发表" href="/post">post</a></span> 前添加一行代码:

<span><a title="上传" href="/upload">upload</a></span>

然后打开 index.js ,在 app.get('/logout') 函数后添加如下代码:

app.get('/upload', checkLogin);
app.get('/upload', function (req, res) {
  res.render('upload', {
    title: '文件上传',
    user: req.session.user,
    success: req.flash('success').toString(),
    error: req.flash('error').toString()
  });
});

注意:我们设置 app.get('/upload', checkLogin); 限制只有登陆的用户才能上传文件。

接下来,我们在 views 文件夹下新建 upload.ejs ,添加如下代码:

<%- include header %>
<form method='post' action='/upload' enctype='multipart/form-data' >
  <input type="file" name='file1'/><br>
  <input type="file" name='file2'/><br>
  <input type="file" name='file3'/><br>
  <input type="file" name='file4'/><br>
  <input type="file" name='file5'/><br>
  <input type="submit" />
</form>
<%- include footer %>

现在我们就可以访问文件上传页面了。这里我们限制一次最多可以上传 5 个文件。清空数据库,重新注册登录后,上传文件页面如下图:

我们现在只是有了一个可以上传文件的表单而已,并不能上传文件,接下来我们添加对上传文件的支持。

打开 app.js ,将 app.use(express.bodyParser()); 修改为:

app.use(express.bodyParser({ keepExtensions: true, uploadDir: './public/images' }));

以上代码的意思是:保留上传文件的后缀名,并把上传目录设置为 /public/images (我们主要用来上传图片)。

打开 index.js ,在 crypto = require('crypto') 后添加一行代码:

fs = require('fs'),

在 app.get('/upload') 后添加如下代码:

app.post('/upload', checkLogin);
app.post('/upload', function (req, res) {
  for (var i in req.files) {
    if (req.files[i].size == 0){
      // 使用同步方式删除一个文件
      fs.unlinkSync(req.files[i].path);
      console.log('Successfully removed an empty file!');
    } else {
      var target_path = './public/images/' + req.files[i].name;
      // 使用同步方式重命名一个文件
      fs.renameSync(req.files[i].path, target_path);
      console.log('Successfully renamed a file!');
    }
  }
  req.flash('success', '文件上传成功!');
  res.redirect('/upload');
});

需要注意的是,即使你只上传了一个文件,其实是上传了那一个文件和四个空文件,所以我们在上传完毕后,要检测这五个文件是否有空文件,若有,则删除空文件并且把非空文件重命名为原来的名字;若没有,只把非空文件重命名为原来的名字。

转载于:https://my.oschina.net/u/1582119/blog/217767

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Node.js 中使用 Express 框架来实现用户管理功能的基本步骤如下: 1. 安装并引入 Express 框架:使用 npm 安装 Express 并在你的 JavaScript 文件中引入它。 2. 创建服务器:使用 Express 创建一个服务器,并设置监听的端口。 3. 定义路由:使用 Express 的路由功能来处理不同的 URL 请求。为用户管理功能定义相应的路由,如: - '/users' 路由,用于获取所有用户 - '/users/:id' 路由,用于获取指定用户 - '/users' 路由,用于创建用户 - '/users/:id' 路由,用于更新指定用户 - '/users/:id' 路由,用于删除指定用户 4. 处理请求:在路由处理函数中处理请求,从数据库中获取或保存用户信息。 5. 启动服务器:调用服务器的 listen 方法来启动服务器。 6. 连接数据库:使用一个数据库驱动将数据库连接到你的应用程序中。 这只是实现一个基本用户管理功能的高度概括,还需根据实际需求进行完善。 ### 回答2: 使用Node.js的Express框架可以很方便地实现用户管理功能。下面是一个简单的示例代码: 首先,确保已经在项目中安装了Express框架和相关依赖模块。在项目根目录下创建一个app.js文件,并在文件中引入必要的模块: ```javascript const express = require('express'); const bodyParser = require('body-parser'); const app = express(); const port = 3000; // 使用body-parser中间件处理POST请求请求 app.use(bodyParser.urlencoded({ extended: true })); // 创建一个空数组用于存储用户数据 let users = []; // 定义路由 app.get('/', (req, res) => { res.send('欢迎访问用户管理页面'); }); // 定义获取用户列表的路由 app.get('/users', (req, res) => { res.json(users); }); // 定义添加用户的路由 app.post('/users', (req, res) => { const { id, name } = req.body; // 将新用户数据添加到数组中 users.push({ id, name }); // 返回添加成功的信息 res.send('添加用户成功'); }); // 定义删除用户的路由 app.delete('/users/:id', (req, res) => { const { id } = req.params; // 查找并删除对应id的用户数据 users = users.filter(user => user.id !== id); // 返回删除成功的信息 res.send('删除用户成功'); }); // 启动服务器监听指定端口 app.listen(port, () => { console.log(`服务器运行在 http://localhost:${port}`); }); ``` 以上代码通过Express框架实现了三个简单的路由:根路由返回欢迎信息,获取用户列表的路由返回用户数据数组,添加用户的路由从POST请求中获取用户数据并将其添加到数组中,删除用户的路由通过路由参数中的id值查找并删除对应的用户数据。 在终端中执行`node app.js`启动服务器,然后可以使用浏览器或者其他工具发送GET、POST和DELETE请求来测试用户管理功能。可以通过访问`http://localhost:3000/users`获取用户列表,通过发送POST请求给`http://localhost:3000/users`添加用户数据,通过发送DELETE请求给`http://localhost:3000/users/{id}`删除对应id的用户数据。 ### 回答3: 使用Node.js和Express框架实现用户管理功能可以按照以下步骤进行: 1. 首先,确保已经安装了Node.js和npm,并且在项目目录中初始化一个新的npm项目。 2. 运行`npm install express`来安装Express框架。 3. 创建一个名为`app.js`的文件,并在其中引入`express`模块和创建一个`express`应用程序。 4. 在`app.js`文件中配置应用程序的中间件和路由。 具实现步骤如下: ``` // app.js const express = require('express'); const app = express(); // 中间件 app.use(express.json()); // 解析JSON请求 // 用户路由 const usersRouter = require('./routes/users'); app.use('/users', usersRouter); // 启动服务器 app.listen(3000, () => { console.log('服务器已启动,监听3000端口'); }); ``` 5. 在项目目录中创建一个名为`routes`的文件夹,并在其中创建一个名为`users.js`的文件来处理用户相关的路由。 ``` // routes/users.js const express = require('express'); const router = express.Router(); // 处理获取所有用户的路由 router.get('/', (req, res) => { // 返回所有用户的逻辑 }); // 处理获取单个用户的路由 router.get('/:id', (req, res) => { // 返回单个用户的逻辑 }); // 处理创建用户的路由 router.post('/', (req, res) => { // 创建用户的逻辑 }); // 处理更新用户的路由 router.put('/:id', (req, res) => { // 更新用户的逻辑 }); // 处理删除用户的路由 router.delete('/:id', (req, res) => { // 删除用户的逻辑 }); module.exports = router; ``` 6. 在各个路由处理函数中实现对用户数据的操作逻辑,可以使用内存、数据库或者文件存储用户数据。 以上就是使用Node.js和Express框架实现用户管理功能的基本步骤。实际开发中可以根据需要添加更多的路由和逻辑来满足具的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值