Search code examples
node.jsmodelschemacouchbasecouchbase-ottoman

couchbase, ottoman throw error when I create a new instance?


I'm new in couchbase and I'm using ottoman framework. I connected the database using ottoman and I create the schema and model User and exported it into controller file. When I create a new instance for that model, ottoman throw an error TypeError: User is not a constructor.

I search so many time and I red the official and non official documents and test it severely. I wrote all about the db in separate file and no change. I'll attach the file below it . But I didn't get any solution. please let me know...

const ottoman = require("ottoman");

exports.connect = async () => {
  try {
    await ottoman.connect({
      connectionString: process.env.DB_CONNECTION_STRING,
      bucketName: process.env.DB_BUCKET,
      username: process.env.DB_USERNAME,
      password: process.env.DB_PASSWORD,
    });
    console.log("Database connected.");
    await ottoman.start();
  } catch (error) {
    console.log("Database not connected due to: ", error.message);
  }
};

connect();

const User = ottoman.model("User", {
  firstName: String,
  lastName: String,
  email: String,
  tagline: String,
});

const perry = new User({
  firstName: "Perry",
  lastName: "Mason",
  email: "[email protected]",
  tagLine: "Who can we get on the case?",
});

const tom = new User({
  firstName: "Major",
  lastName: "Tom",
  email: "[email protected]",
  tagLine: "Send me up a drink",
});

main = async () => {
  await perry.save();
  console.log(`success: user ${perry.firstName} added!`);

  await tom.save();
  console.log(`success: user ${tom.firstName} added!`);
};

main();

Solution

  • This issue happened due to disorder of functions calling in app.js file. All I used till now was a Mongodb and mongoose in noSQL. In the case of mongodb we can call the database config function after api endpoint specification. I wrote my code like this in couchbase. But it didn't stick in couchbase. I'll provide my code before and after fixing for more clarity, and I'm very sorry for my bad english. :)

    Before fixing app.js file:

    const express = require("express");
    const cors = require("cors");
    const morgan = require("morgan");
    const app = express();
    require("dotenv").config();
    const PORT = process.env.PORT || 3000;
    
    //middlewares
    app.use(cors());
    app.use(morgan("dev"));
    app.use(express.json());
    app.use(express.urlencoded({ extended: true }));
    
    
    // routes
    app.use("/api/", require("./routes/index"));
    
    // bad requiest
    app.use("*", (req, res) => {
      res.status(404).json({ message: "Bad Requist." });
    });
    
    // error middleware
    const { errorHandler } = require("./middlewares/error-middleware");
    app.use(errorHandler);
    
    // database setup
    const db = require("./config/db");
    db.connect();
    
    
    // server setup
    app.listen(PORT, (err) => {
      if (err) {
        console.log(err.message);
      } else {
        console.log(`The server is running on: ${PORT}.`);
      }
    });
    
    

    After fixing app.js file:

    const express = require("express");
    const cors = require("cors");
    const morgan = require("morgan");
    const app = express();
    require("dotenv").config();
    const PORT = process.env.PORT || 3000;
    
    //middlewares
    app.use(cors());
    app.use(morgan("dev"));
    app.use(express.json());
    app.use(express.urlencoded({ extended: true }));
    
    // database setup
    const db = require("./config/db");
    db.connect();
    
    // routes
    app.use("/api/", require("./routes/index"));
    
    // bad requiest
    app.use("*", (req, res) => {
      res.status(404).json({ message: "Bad Requist." });
    });
    
    // error middleware
    const { errorHandler } = require("./middlewares/error-middleware");
    app.use(errorHandler);
    
    // server setup
    app.listen(PORT, (err) => {
      if (err) {
        console.log(err.message);
      } else {
        console.log(`The server is running on: ${PORT}.`);
      }
    });