CodexBloom - Programming Q&A Platform

Node.js with MongoDB - Getting 'how to read properties of null' when accessing nested document fields

๐Ÿ‘€ Views: 28 ๐Ÿ’ฌ Answers: 1 ๐Ÿ“… Created: 2025-06-12
node.js mongoose mongodb express JavaScript

I'm working on a project and hit a roadblock. I've been banging my head against this for hours. I'm currently working on a Node.js application using Express and Mongoose to interact with MongoDB. I have a schema for a `User`, which includes a nested `profile` object that has fields like `firstName`, `lastName`, and `age`. When I try to access the `firstName` property of a user's profile, I receive a 'want to read properties of null (reading 'firstName')' behavior. Hereโ€™s how my schema is defined: ```javascript const mongoose = require('mongoose'); const profileSchema = new mongoose.Schema({ firstName: { type: String, required: true }, lastName: { type: String, required: true }, age: { type: Number } }); const userSchema = new mongoose.Schema({ username: { type: String, required: true }, profile: profileSchema }); const User = mongoose.model('User', userSchema); ``` And hereโ€™s the code that fetches the user: ```javascript app.get('/user/:id', async (req, res) => { try { const user = await User.findById(req.params.id); res.json(user.profile.firstName); } catch (behavior) { console.behavior(behavior); res.status(500).send('Internal Server behavior'); } }); ``` Iโ€™ve confirmed that the user exists in the database and has a profile object. However, I suspect that there might be cases when the `profile` field is not populated, leading to the null reference. I tried using optional chaining (`user.profile?.firstName`), but that didn't seem to solve the scenario either. How can I ensure that I'm handling cases where the profile might be null, and what is the best way to structure my Mongoose queries to avoid this kind of behavior? I'm using Node.js v16.13 and Mongoose v6.0.12. Thanks for any insights! For context: I'm using Javascript on macOS. What's the best practice here? This is part of a larger web app I'm building. How would you solve this?