Node.js 以CSV格式从Mongo DB数据库导出数据

Node.js 以CSV格式从Mongo DB数据库导出数据,node.js,mongodb,mongoose,ejs,json2csv,Node.js,Mongodb,Mongoose,Ejs,Json2csv,我在Node JS中有一个项目,我想通过视图中的按钮(index.ejs)将数据库中包含的数据导出到CSV文件中的Mongo DB)。 我正在使用mongoose连接数据库并将数据导出到CSV,我正在尝试使用json-2-CSV 在按钮中,我添加了一个url,以便能够通过按钮调用该url,并且json-2-csv函数会响应该url,但我不知道如何做,或者这是否是最好的方法 这是我的app.js: const fs = require('fs'); const json2csv = require

我在Node JS中有一个项目,我想通过视图中的按钮(
index.ejs
)将数据库中包含的数据导出到CSV文件中的
Mongo DB
)。 我正在使用
mongoose
连接数据库并将数据导出到CSV,我正在尝试使用
json-2-CSV

在按钮中,我添加了一个url,以便能够通过按钮调用该url,并且json-2-csv函数会响应该url,但我不知道如何做,或者这是否是最好的方法

这是我的
app.js

const fs = require('fs');
const json2csv = require("json2csv").Parser;
const userModel = require('./models/users');
const express = require("express");
const app = express();

app.get('/export/csv', async (req, res) => {
  await userModel.find((err, data) => {
      if (err) throw err;
      const json2csvParser = new json2csv({ header: true });
      const csvData = json2csvParser.parse(data);
      fs.writeFile("users.csv", csvData, function(error) {
          if (error) throw error;
          console.log("Write to bezkoder_mongodb_fs.csv successfully!");
      });
      
  });
});
这是
按钮

<form action="/export/csv" mehotd="GET">
    <button id="export-csv">Export CSV</button>
</form>

导出CSV

您可以在单个文件
app.js
中实现所有这些功能。我们需要有
json2csv
模块,因为这个
模块有
parser
类,这样我们就可以使用
parse()
方法来获取
CSV
格式数据为
String
。这里的
lean
选项告诉mongoose跳过实例化完整的
mongoose文档
,只需给你
普通的老JavaScript对象
POJO
。我还使用了
用户名
密码
作为
文档
,因此相应地更改它

const path = require('path');
const ejs = require('ejs');
const fs = require('fs');
const express = require('express');
//You need to have some documents into your DB first 
const Collection = require('your/Modal Path');
const Json2csvParser = require("json2csv").Parser;
const app = express();
const port = process.env.PORT || 3000;

//Templating Engine Ejs
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));

//Middleware
app.use(express.urlencoded({
    extended: true
}));
app.use(express.json());

//MONGO DB CONNECTION 
const url = 'mongodb://localhost:27017/users';
mongoose.connect(url, {
        useNewUrlParser: true,
        useUnifiedTopology: true
    })
    .then(() => {
        console.log('Successfully Established Connection with MongoDB')
    }).catch(err => {
        console.log('Failed to Establish Connection with MongoDB with Error: ' + err);
        process.exit();
    });

app.get('/export/csv', async (req, res) => {
    await Collection.find({}).lean().exec((err, data) => {
        if (err) throw err;
        const csvFields = ['_id', 'username', 'password']
        console.log(csvFields);
        const json2csvParser = new Json2csvParser({
            csvFields
        });
        const csvData = json2csvParser.parse(data);
        fs.writeFile("bezkoder_mongodb_fs.csv", csvData, function(error) {
            if (error) throw error;
            console.log("Write to bezkoder_mongodb_fs.csv successfully!");
        });
        res.send('File downloaded Successfully')
    });
});

//HOME route
app.get('/', (req, res) => {
    res.render('home.ejs');
});

//listening to the PORT Number 
app.listen(port, console.log(`Server is running at ${port}`));
这就是你的
app.js
文件的样子。并在
views目录中创建
home.ejs
文件,如
views/home.ejs
。并添加以下代码:

<form action="/export/csv" mehotd="GET">
    <button id="export-csv">Export CSV</button>
</form>

导出CSV

首先,您需要建立数据库连接,并在数据库中保存数据。你这样做很好,那么你被困在哪里?你能解释更多吗?@kedarsedai我不知道在app.js或控制器中将函数放在哪里,也不知道如何将连接导入数据库。另外,我试图从按钮调用它,但我也做不到,我不知道如何添加到响应URL的函数中。我有几个问题:csv下载到项目的根文件夹中,但它不包含数据库的数据,它只包含数据类型和字段名。我的另一个问题是,当下载它的过程并没有结束,我不知道如何完成它。我已经用当前的代码更新了这个问题。现在如果可以,非常感谢。我现在还有一个问题,是否可以更改目标文件夹,例如,文件是否下载到下载文件夹中,下载的符号是否显示在浏览器中?是的,当然可以更改
destination
文件夹,如
fs.writeFile(“C:/folder/bezkoder\u mongodb\u fs.csv”,csvData,function(err){….
好的,谢谢,效果很好。你能帮我回答另一个问题吗?我打开了“处理数据模型中节点JS中的错误”。我尝试的是在输入表单中显示错误,例如,如果在“年龄”字段中插入一个字符串,该字符串将显示错误,表单将重新启动。我已经搜索过,但在此wi上找不到任何内容th Node JS和我都是新手。你的意思是如果用户输入的年龄是字符串,需要是整数,那么你需要显示一个错误,比如(年龄应该是数字)?