How to add multiple users at once by upload a CSV file in nodejs?

Viewed 295

I have a users model. I create a controller to add a new user. But I want to add multiple users at once by upload a CSV file. new users stores in the database. The CSV file contain 3 columns: first_name, last_name, email. How can I solve this problem?

Model.js

 const User = sequelize.define(
    "users",
    {
      id: {
        type: Sequelize.BIGINT(20),
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
      },
      first_name: {
        type: Sequelize.STRING(60),
      },
      last_name: {
        type: Sequelize.STRING(60),
      },
      email: {
        type: Sequelize.STRING(255),
      },
    })

Controller.js

const addUser = async(req, res) => {
    try {

        console.log(req.body);
        let { first_name, last_name, email } = req.body

        const newUser = await User.create({
            first_name,
            last_name,
            email
        }) 
        return res.status(201).json({ error: false, msg: "Add Successfuly", data: newUser})
    } catch (error) {

        return res.status(500).json({ error: true, msg: "Server Error"})
    }
}

How can I do that?

1 Answers

You can break down the problem into two:

1 Parse csv file uploaded: you can reference to a similar question: How can I parse data from a csv file uploaded by a user in node/express?

You can use this node module to parse the csv file. https://www.npmjs.com/package/csvtojson

For example you have file name users in the request object.

const csv=require('csvtojson');

csv()
.fromString(req.files.users.data.toString('utf8'))
.on('json', (user) => {
    console.log(user);
})
.on('done', () => {
    console.log('done parsing');
});

2 After reading the data from the uploaded csv, you can reuse your logic to insert user into database by looping through the data.

Related