Javascript TypeError:无法读取属性';类别';空的

Javascript TypeError:无法读取属性';类别';空的,javascript,node.js,api,next.js,Javascript,Node.js,Api,Next.js,我的后端终端返回null和TypeError:无法读取null的属性“categories”,我的代码缺少什么?它还在我的控制台上返回null。在我的控制器上记录(用户) 这是我的功能: function addCategory(e) { e.preventDefault(); fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/users`, { method: 'POST', headers: {

我的后端终端返回
null
TypeError:无法读取null
的属性“categories”,我的代码缺少什么?它还在我的控制台上返回
null
。在我的控制器上记录(用户)

这是我的功能:

function addCategory(e) {
    e.preventDefault();

    fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/users`, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Authorization': `Bearer ${localStorage.getItem('token')}`
        },
        body: JSON.stringify({
            name: name,
            description: description,
            type: type,
            amount: amount
        })
    })
    .then(res => {
        return res.json()
    })
    .then(data => {
        if (data === true){
            Swal.fire({
                title: "Category added!",
                icon: "success",
            })
            Router.push('/category')
        } else {
            Router.push('/errors/1')
        }
    })
}
router.post('/', auth.verify, (req, res) => {
    const user = auth.decode(req.headers.authorization)
    CategoryController.addCategory(req.body)
    .then(result => res.send(result))
})
module.exports.addCategory = (params) => {
    return User.findById(params.userId)
        .then((user, err) => {
            console.log(user)
            if(err) return false
            user.categories.push(params)
            return user.save()
                .then((updatedUser, err) => {
                    return err ? false : true
                })
                .catch(err => {
                    console.log(err)
                })
        })
        .catch(err => {
            console.log(err)
        })
}
这是我的路线:

function addCategory(e) {
    e.preventDefault();

    fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/users`, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Authorization': `Bearer ${localStorage.getItem('token')}`
        },
        body: JSON.stringify({
            name: name,
            description: description,
            type: type,
            amount: amount
        })
    })
    .then(res => {
        return res.json()
    })
    .then(data => {
        if (data === true){
            Swal.fire({
                title: "Category added!",
                icon: "success",
            })
            Router.push('/category')
        } else {
            Router.push('/errors/1')
        }
    })
}
router.post('/', auth.verify, (req, res) => {
    const user = auth.decode(req.headers.authorization)
    CategoryController.addCategory(req.body)
    .then(result => res.send(result))
})
module.exports.addCategory = (params) => {
    return User.findById(params.userId)
        .then((user, err) => {
            console.log(user)
            if(err) return false
            user.categories.push(params)
            return user.save()
                .then((updatedUser, err) => {
                    return err ? false : true
                })
                .catch(err => {
                    console.log(err)
                })
        })
        .catch(err => {
            console.log(err)
        })
}
这是我的控制器:

function addCategory(e) {
    e.preventDefault();

    fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/users`, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Authorization': `Bearer ${localStorage.getItem('token')}`
        },
        body: JSON.stringify({
            name: name,
            description: description,
            type: type,
            amount: amount
        })
    })
    .then(res => {
        return res.json()
    })
    .then(data => {
        if (data === true){
            Swal.fire({
                title: "Category added!",
                icon: "success",
            })
            Router.push('/category')
        } else {
            Router.push('/errors/1')
        }
    })
}
router.post('/', auth.verify, (req, res) => {
    const user = auth.decode(req.headers.authorization)
    CategoryController.addCategory(req.body)
    .then(result => res.send(result))
})
module.exports.addCategory = (params) => {
    return User.findById(params.userId)
        .then((user, err) => {
            console.log(user)
            if(err) return false
            user.categories.push(params)
            return user.save()
                .then((updatedUser, err) => {
                    return err ? false : true
                })
                .catch(err => {
                    console.log(err)
                })
        })
        .catch(err => {
            console.log(err)
        })
}
这是终端错误:

function addCategory(e) {
    e.preventDefault();

    fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/users`, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Authorization': `Bearer ${localStorage.getItem('token')}`
        },
        body: JSON.stringify({
            name: name,
            description: description,
            type: type,
            amount: amount
        })
    })
    .then(res => {
        return res.json()
    })
    .then(data => {
        if (data === true){
            Swal.fire({
                title: "Category added!",
                icon: "success",
            })
            Router.push('/category')
        } else {
            Router.push('/errors/1')
        }
    })
}
router.post('/', auth.verify, (req, res) => {
    const user = auth.decode(req.headers.authorization)
    CategoryController.addCategory(req.body)
    .then(result => res.send(result))
})
module.exports.addCategory = (params) => {
    return User.findById(params.userId)
        .then((user, err) => {
            console.log(user)
            if(err) return false
            user.categories.push(params)
            return user.save()
                .then((updatedUser, err) => {
                    return err ? false : true
                })
                .catch(err => {
                    console.log(err)
                })
        })
        .catch(err => {
            console.log(err)
        })
}

您将使用名称、描述、类型和金额发送到后端对象,但不使用userId属性。在后端,find调用返回null。Find正在尝试获取具有未定义值的用户。

@yochanansheinberger我已经尝试过了,先生,现在它返回一个不同的错误
错误:需要数据和salt参数
您要传递给
CategoryController的请求正文。addCategory
不包含
用户ID
参数,意思是
user.findById(params.userId)
找不到任何用户。请尝试在您的请求中传递有效的
userId
。@juliomalves我应该这样做吗,先生?`body:JSON.stringify({name:name,description:description,type:type,amount:amount})`是的,只要那是一个有效的
用户ID
。它会在我的控制台上返回未定义的“userId”。我该怎么做呢,先生?