0

This is my demo_db.js.

const { json } = require("express");
const mysql = require("mysql");

const con = mysql.createConnection({
  host: "127.0.0.1",
  user: "root",
  password: "ank@123",
  database: "usersdb",
  port: 3306,
  multipleStatements: true,
});

con.connect((err) => {
  if (err) {
    console.error("Error connecting to the database:", err);
    return;
  }
  console.log("Connected");
});

const insertData = (id, name, callback) => {
  const userData = [[id, name]];
  con.query(
    "INSERT INTO users (id, name) VALUES ?",
    [userData],
    function (err, result) {
      if (err) {
        console.error("Error inserting data:", err);
        callback(err, null);
      } else {
        console.log("Number of records inserted: " + result.affectedRows);
        callback(null, { id, name });
      }
    }
  );
};

const getData = (callback) => {
  con.query("SELECT * FROM users", function (err, result) {
    if (err) {
      console.error("Error retrieving data:", err);
      callback(err, null);
    } else {
      console.log(result);
      const jsonData = JSON.stringify(result);
      callback(null, jsonData);
    }
  });
};

module.exports = { getData, insertData };


This is my app.js. It has 2 api's one is get data from DB, another is to add data to DB.

const express = require("express");
const app = express();
const fs = require("fs");
const { people } = require("./data2");
const insertData = require("./demo_db");
const getData = require("./demo_db");
// const people = require("./routes/people");
// const auth = require("./routes/auth");

// //static assets
app.use(express.static("./methods-public"));
// //parse form data
app.use(express.urlencoded({ extended: false }));

app.use(express.json());

// app.use("/api/people", people);

// app.use("/login", auth);

app.get("/api/people", (req, res) => {
  getData((err, result) => {
    if (err) {
      return res.status(500).json({ error: err });
    }
    res.json({ data: result });
  });
});

app.post("/api/people/add", (req, res) => {
  const { id, name } = req.body;
  insertData(id, name, (err, insertedData) => {
    if (err) {
      return res.status(500).json({ error: "Failed to insert data" });
    }
    res.json({ message: "Data inserted successfully", data: insertedData });
  });
});

app.listen(5000, () => {
  console.log("Server is listening on port 5000....");
});

Both methods are working fine individually.
If I only have one method in demo_db.js then it is working fine,

If i try to export 2 modules its showing error.

Error is:

TypeError: getData is not a function
    at C:\Users\yamab\Desktop\node-express-course\node-express-course\02-express-tutorial\app.js:22:3
    at Layer.handle [as handle_request] (C:\Users\yamab\Desktop\node-express-course\node-express-course\02-express-tutorial\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\yamab\Desktop\node-express-course\node-express-course\02-express-tutorial\node_modules\express\lib\router\route.js:144:13)
    at Route.dispatch (C:\Users\yamab\Desktop\node-express-course\node-express-course\02-express-tutorial\node_modules\express\lib\router\route.js:114:3)   
    at Layer.handle [as handle_request] (C:\Users\yamab\Desktop\node-express-course\node-express-course\02-express-tutorial\node_modules\express\lib\router\layer.js:95:5)
    at C:\Users\yamab\Desktop\node-express-course\node-express-course\02-express-tutorial\node_modules\express\lib\router\index.js:284:15
    at Function.process_params (C:\Users\yamab\Desktop\node-express-course\node-express-course\02-express-tutorial\node_modules\express\lib\router\index.js:346:12)
    at next (C:\Users\yamab\Desktop\node-express-course\node-express-course\02-express-tutorial\node_modules\express\lib\router\index.js:280:10)
    at C:\Users\yamab\Desktop\node-express-course\node-express-course\02-express-tutorial\node_modules\body-parser\lib\read.js:137:5
    at AsyncResource.runInAsyncScope (node:async_hooks:203:9)

Anyone faced this,

How to solve this error

derloopkat
  • 6,232
  • 16
  • 38
  • 45

1 Answers1

0

You should import it like this:

const { insertData, getData } = require("./demo_db");

Since you exported it like this:

module.exports = { getData, insertData };

If you want to deepen your knowledge about import and export, I advise you to take a look at this documentation, which will greatly enhance your understanding:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export