Malay Ruparel
Malay Ruparel

Reputation: 87

Node JS/Mongoose - model.findbyID is not returning record though exist

In my Node JS/Express I am trying to query ID using following code:


router.get('/module/:id/',  (req, res ) => {
    try {
        console.log('in get module')
        const luamodule =  LuaModule.findById('5eb2818c955bc7202498cd09')
        console.log('module name is ' + luamodule.name)
    } catch (error) {
        console.log('In error --> ' + error)
        res.status(404).send(error.Message)
    }
})

Though record exists with ID - 5eb2818c955bc7202498cd09, function does not return record.

console.log prints "module name is undefined" as output.

Following the luamodule.js in models directory

const validator = require('validator')

const luaModuleSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true,
        trim: true
    },
    email: {
        type: String,
        // unique: true,
        required: true,
        trim: true,
        lowercase: true,
        validate(value) {
            if (!validator.isEmail(value)) {
                throw new Error('Email is invalid')
            }
        }
    },
    environment: {
        type: String,
        required: true,
        trim: true,

    },
    description: {
        type: String,
        required: true,
        trim: true,

    },
    modulefile: {
        type: Buffer
    },

})

const luaModule = mongoose.model('LuaModule', luaModuleSchema)

module.exports = luaModule ```

End objective of  the exercise is to accept the parameters from client and return the zip file stored into database.

Appreciate any help in  this regard.

Upvotes: 0

Views: 337

Answers (2)

Shuvro
Shuvro

Reputation: 242

You Can Follow This Code

Model

const validator = require('validator')

const luaModuleSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true,
        trim: true
    },
    email: {
        type: String,
        // unique: true,
        required: true,
        trim: true,
        lowercase: true,
        validate(value) {
            if (!validator.isEmail(value)) {
                throw new Error('Email is invalid')
            }
        }
    },
    environment: {
        type: String,
        required: true,
        trim: true,

    },
    description: {
        type: String,
        required: true,
        trim: true,

    },
    modulefile: {
        type: Buffer
    },

})

const LuaModule = mongoose.model('LuaModule', luaModuleSchema)

module.exports = LuaModule

> Controller

router.get('/module/:id/', async (req, res ) => {
    try {
        console.log('in get module')
        const luamodule =await LuaModule.findById('5eb2818c955bc7202498cd09')
        console.log('module name is ' + luamodule.name)
    } catch (error) {
        console.log('In error --> ' + error)
        res.status(404).send(error.Message)
    }
})

Upvotes: 0

Yevhenii
Yevhenii

Reputation: 1713

node.js is asynchronous, this LuaModule.findById('5eb2818c955bc7202498cd09') code returns Promise object.

You have to resolve this promise to get result, try this way

router.get('/module/:id/', async (req, res ) => {
    try {
        console.log('in get module')
        const luamodule = await LuaModule.findById('5eb2818c955bc7202498cd09')
        console.log('module name is ' + luamodule.name)
    } catch (error) {
        console.log('In error --> ' + error)
        res.status(404).send(error.Message)
    }
})

Upvotes: 1

Related Questions