Nodejs express4 项目使用 express-formidable 做文件上传后,原本成功的连接 mysql 的语句一直跑不动,也没抛异常

发布于 1周前 作者 zlyuanteng 来自 nodejs/Nestjs

Nodejs express4 项目使用 express-formidable 做文件上传后,原本成功的连接 mysql 的语句一直跑不动,也没抛异常

项目同样是在自动生成的 app.js 里配置的
const formidableMiddleware = require(‘express-formidable’);
以及 app.use(formidableMiddleware())。
拿掉这两句,连接 mysql 的那些是没问题的。
知道 req.body 因为那个中间件变成了 req.fields 和 req.files,不然转发请求到腾讯 cos 做的文件上传也不会成功。就是忙了半天图片上传忙成功后,回头发现别的连接数据库的接口全出问题了,POST /comic/list - - ms - -
当然,如果各位有人试过项目使用 express-formidable 并且没有出现连接 mysql 的问题,直接反驳不存在这种问题就行了,我自行去排查一下
(今天特地把连接语句换成了官方给的简单版 http://www.expressjs.com.cn/guide/database-integration.html#mysql,就怕你们直接贴个官链水完就跑)


2 回复

老老实实用 formidable 去了


在Node.js的Express 4项目中,如果在使用express-formidable处理文件上传后,原本能成功执行的MySQL连接语句出现问题但不抛出异常,可能是由于几个潜在原因导致的。以下是一些可能的解决步骤和代码示例:

  1. 检查中间件顺序: 确保express-formidable中间件在处理请求之前正确配置,且不影响后续的数据库连接逻辑。

    const express = require('express');
    const formidable = require('express-formidable');
    const mysql = require('mysql');
    
    const app = express();
    app.use(formidable({ multiples: true, uploadDir: './uploads', keepExtensions: true }));
    
    const db = mysql.createConnection({
      host: 'localhost',
      user: 'root',
      password: 'password',
      database: 'test'
    });
    
    db.connect((err) => {
      if (err) {
        console.error('error connecting: ' + err.stack);
        return;
      }
      console.log('connected as id ' + db.threadId);
    });
    
    app.post('/upload', (req, res) => {
      // 处理文件上传后的逻辑
      res.send('File uploaded');
    });
    
    app.listen(3000, () => console.log('Server running on port 3000'));
    
  2. 错误处理: 在数据库连接和查询中增加详细的错误处理逻辑,确保任何异常都能被捕获和记录。

  3. 资源竞争: 如果服务器在处理大量文件上传时资源受限,可能会影响数据库连接。检查服务器资源使用情况,如内存和CPU。

  4. 日志记录: 增加更多的日志记录点,帮助定位问题发生的具体位置。

确保逐一排查以上可能的问题点,通常可以定位并解决连接MySQL失败的问题。

回到顶部