我想构建一个 API“/upload/excel”,允许用户导入 Excel 文件,并在收到 Excel 文件后在其中读取其字段并将其保存到数据库中。
如何实现这一目标?
最佳答案
我使用 multer 来上传文件,使用 xlsx 来处理它,并使用 mongodb 作为数据库(mongoose 用于模型):
Lead
是数据模型,您必须添加 Excel 工作表列名称。请参阅 mongoose 文档以获取更多信息
const express = require("express");
const multer = require("multer");
const connectDB = require("./config/db");
const Lead = require("./models/Lead");
connectDB();
const uploadXLSX = async (req, res, next) => {
try {
let path = req.file.path;
var workbook = XLSX.readFile(path);
var sheet_name_list = workbook.SheetNames;
let jsonData = XLSX.utils.sheet_to_json(
workbook.Sheets[sheet_name_list[0]]
);
if (jsonData.length === 0) {
return res.status(400).json({
success: false,
message: "xml sheet has no data",
});
}
let savedData = await Lead.create(jsonData);
return res.status(201).json({
success: true,
message: savedData.length + " rows added to the database",
});
} catch (err) {
return res.status(500).json({ success: false, message: err.message });
}
};
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "uploads");
},
filename: function (req, file, cb) {
cb(null, Date.now() + "-" + file.originalname);
},
});
const upload = multer({ storage: storage });
app.post("/upload", upload.single("xlsx"), uploadXLSX);
const port = process.env.PORT || 5000;
const server = app.listen(port, () => {
console.log("app running on port", port);
});
因此,当您使用 postman 调用 localhost:5000/upload
时,请参见下图
关于node.js - 如何在nodejs中上传和读取excel文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70562438/