Skip to content

Node.JS – Product is not a constructor error

My code is as follows and gets me "message": "Product is not a constructor" using postman. Router seems to be properly configured but now I don’t know what is the issue. File product constructor is placed at the right direction. When running node server I get no errors in terminal.

product constructor

const mongoose = require('mongoose');
const productSchema = mongoose.Schema({
  _id: mongoose.Schema.Types.ObjectId,
  name: String,
  price: Number

module.export = mongoose.model('Product', productSchema);

Router for POSTS

const mongoose = require('mongoose');
const Product = require('../models/product'); //import schema, product constructor

//POSTs to products'/', (req,res,next) => {

    //ObjectId method to add new ID
    const product = new Product({
      _id: new mongoose.Types.ObjectId(),
      price: req.body.price

    //mongoose method to save data
      .then(result => {
    .catch(err => console.log(err));

      message: 'sending POSTs to /products',
      createdProduct: product


It should be module.exports (doc), not module.export:

module.exports = mongoose.model('Product', productSchema);

Right now your module essentially exports a default value (an empty object).

As a sidenote, Schema is expected to be used as a constructor. While the function itself is written the way it’ll recall itself with proper syntax if used without new:

if (!(this instanceof Schema)) {
  return new Schema(obj, options);

… you can both avoid this (albeit miniscule) loss of performance and, what’s more important, show the actual intent clearly:

const productSchema = new mongoose.Schema({
  _id: mongoose.Schema.Types.ObjectId,
  name: String,
  price: Number