gpt4 book ai didi

javascript - TypeError : . 那么不是一个函数

转载 作者:行者123 更新时间:2023-12-02 18:33:47 25 4
gpt4 key购买 nike

当用户不是管理员时,我遇到错误,它不会显示我的消息“未授权访问此页面”,因为我在控制台中收到此错误:

    TypeError: productController.createProduct(...).then is not a function

我的路由器设置如下:

    router.post('/create',auth.verify, (req, res)=>{

const isAdmin = auth.decode(req.headers.authorization).isAdmin;

productController.createProduct(req.body,isAdmin).then(result => res.send(result));})

还有我的 Controller :

module.exports.createProduct = (reqBody, isAdmin) => {
if (isAdmin === true) {
let newProduct = new Product({
name: reqBody.name,
description: reqBody.description,
price: reqBody.price,
});

return newProduct.save().then((result, error) => {
return error ? false : 'Successfully created a product';
});
} else {
return 'Not authorized to access this page';
}
};

当用户是管理员时一切正常。我想知道这是否与当用户不是管理员时我返回消息的方式有关。因为我正在使用 promise ?

最佳答案

解决这个问题本质上有两种方法。

第一种方式,您可以解决 API 的整体设计并使代码更加有效

例如,如果根据user是否为admin来操作成功,则可以使用 Promise.reject 或 Promise.resolve 进行响应。但是,如果您从 createProduct 函数返回 Promise.reject,那么您还应该更新 Controller 中处理拒绝的方式。

例如:

创建产品.js

module.exports.createProduct = (reqBody, isAdmin) => {
if (isAdmin === true) {
let newProduct = new Product({
name: reqBody.name,
description: reqBody.description,
price: reqBody.price,
});

return newProduct.save().then((result, error) => {
return error ? false : 'Successfully created a product';
});
} else {
// Return a promise here
return Promise.reject('Not authorized to access this page');
}
};

Controller .js

router.post('/create',auth.verify, (req, res)=>{

const isAdmin = auth.decode(req.headers.authorization).isAdmin;

productController.createProduct(req.body,isAdmin)
.then(result => res.send(result))
.catch(error => res.send(error)); // catch will be executed due to Promise.reject

})

或者,在第二种方式中,您可以简单地从 createProduct 函数的 else block 返回 Promise.resolve

示例:

return Promise.resolve("无权访问此页面")

在这种情况下,您不需要更新 Controller 代码。

我建议遵循 .then .catch 的处理方式,以便捕获您在产品创建部分可能遇到的任何错误。它使错误跟踪更加容易。

关于javascript - TypeError : . 那么不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69084925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com