You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中Postman执行GET/POST请求无响应问题排查求助

问题排查与修复方案

你的POST请求卡住无响应,主要是代码里的变量错误、响应对象被覆盖、未处理错误导致请求挂起,以下是具体问题和修复:

核心问题点

  • 模型名称错误:代码中导入的模型是myrecord,但插入数据时用了未定义的record,导致报错且未处理
  • 响应对象被覆盖:insertMany的then回调里用res作为参数,覆盖了外层的Express响应对象res,无法正确返回结果
  • 未定义变量:res.json(ress)中的ress未定义,会抛出错误
  • 错误未处理:嵌套的try/catch和外层catch都没有返回错误响应,导致请求一直处于挂起状态
  • 数据来源错误:上传Excel后解析得到的data未被使用,反而用了不存在的req.body.BulkData

修复后的代码

process.env.TZ = 'Asia/Calcutta';
var port = process.env.PORT || 5000;
var cCPUs = require('os').cpus().length;
const cluster = require('cluster');
const express = require('express');
const reader = require('xlsx');
const path = require('path');
const app = express();
const multer = require('multer');
const mongoose = require('mongoose');
const db = require('./Config/Keys').mongoURI;
const logger = require('./Config/workerlog');
const myrecord = require('./model/myrecord');

// 添加解析中间件(处理JSON和表单数据)
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

mongoose
  .connect(db, {
    keepAlive: true,
  })
  .then(() => logger.info('MongoDB Connected'))
  .catch((err) => console.log(err));

var storage = multer.diskStorage({
  filename: function (req, file, cb) {
    var datetimestamp = Date.now();
    cb(
      null,
      file.fieldname +
        '-' +
        datetimestamp +
        '.' +
        file.originalname.split('.')[file.originalname.split('.').length - 1]
    );
  },
});
var uploads = multer({
  storage: storage,
  fileFilter: function (req, file, callback) {
    const ext = file.originalname.split('.').pop().toLowerCase();
    if (!['xls', 'xlsx', 'csv'].includes(ext)) {
      return callback(new Error('Wrong extension type'));
    }
    callback(null, true);
  },
}).single('file');

app.post('/Getexcelfile', async function (req, res) {
  uploads(req, res, async function (err) {
    if (err) {
      return res.status(400).json({ Message: 'Something went wrong...!', error: err.message });
    }
    if (!req.file) {
      return res.status(400).json({ Message: 'Please choose a file' });
    }
    try {
      const file = reader.readFile(req.file.path);
      var data = [];
      const sheets = file.SheetNames;
      for (let i = 0; i < sheets.length; i++) {
        const temp = reader.utils.sheet_to_json(file.Sheets[sheets[i]]);
        data.push(...temp); // 简化数组拼接
      }
      // 使用解析后的data插入数据库,修改模型名为myrecord,避免覆盖res对象
      const insertedData = await myrecord.insertMany(data);
      res.json({
        path: req.file.path,
        insertedCount: insertedData.length,
        data: data
      });
    } catch (e) {
      console.error('处理Excel或插入数据出错:', e);
      return res.status(500).json({ Message: 'Internal server error', error: e.message });
    }
  });
});

app.get('/GetRecordDetails', async (req, res) => {
  try {
    const ResponseData = await myrecord.find();
    res.json(ResponseData);
  } catch (err) {
    console.error('查询数据出错:', err);
    res.status(500).json({ Message: 'Failed to fetch records', error: err.message });
  }
});

if (cluster.isMaster) {
  // Create a worker for each CPU
  for (var i = 0; i < cCPUs; i++) {
    cluster.fork();
  }
} else {
  app.listen(port, () => console.log(`Listening on port ${port}`));
}

额外优化说明

  1. 替换了数组判断逻辑,用includes替代indexOf,更简洁易读
  2. 简化了数组拼接,用push(...temp)替代forEach循环
  3. 所有异步操作都添加了错误捕获,并返回对应的错误响应
  4. 调整了状态码:参数错误用400,服务器错误用500,更符合HTTP规范
  5. 添加了express解析中间件,确保能正确处理请求体

内容的提问来源于stack exchange,提问作者ASHIM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 13:05:42