简体   繁体   中英

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.

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)
    }
})

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)
    }
})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM