我正在为excel创建一个rest api。如何为可以由用户上传任意字段的 excel 文件创建 MongoDB 模式?
2 回答
0
根据定义,“模式”几乎是“任意字段”的反义词。如果您的输入数据确实是完全任意的,那么您显然无法使用模式来描述或验证它。
于 2022-01-13T09:11:44.863 回答
0
首先,我们可以定义一个名为excelData.model.js的模型,它有一个数据字段,可以接受来自 excel 文件的值数组:
const mongoose = require("mongoose")
const idvalidator = require("mongoose-id-validator");
const excelDataSchema = new mongoose.Schema({
Data:{
type: Array,
required: true
}
})
excelDataSchema.plugin(idvalidator);
const ExcelData = mongoose.model('excelData',excelDataSchema)
exports.ExcelData = ExcelData
然后我们可以定义excelData.controller.js这是一个控制器,它具有读取 excel 文件并从中提取数据的功能,然后调用模型来保存数据
const readExcelFile = require('read-excel-file/node')
const { ExcelData } = require("../models/excelData.model");
exports.excelDataExtractor = async (req, res) => {
try {
if (req.file == undefined) {
return res.status(400).send("Please upload an excel file!");
}
readExcelFile(req.file.path)
.then(async (rows) => {
var data = []
for (let i = 0; i < rows.length; i++) {
data.push(rows[i])
}
for (let i = 0; i < data.length; i++) {
try {
let excelData = new ExcelData({ data: data[i] })
await excelData.save()
} catch (ex) {
res.status(400).send(ex.message);
}
}
return res.status(200).send({
message: "Excel Data extracted successfully",
data
})
})
.catch(error => {
return res.status(400).send({
message: "Failed to read the uploaded excel file!",
error: error.message
});
})
} catch (ex) {
res.status(500).send(ex.message);
}
}
于 2022-01-13T06:42:02.927 回答