【问题标题】:How I exports a const outside another const using app.post? Express Javascript如何使用 app.post 将 const 导出到另一个 const 之外?表达 Javascript
【发布时间】:2020-06-12 12:11:02
【问题描述】:

我有一个文件 signupResponse.js

const foundRegisterUser = function(err, foundUser){
        if(!err){
            console.log("Não tivemos erros")
            if(!foundUser){
                if(req.body.password == req.body.passwordConfirmation){ 
                    User.register({username: req.body.email}, req.body.password, function(err, user){
                        if (err){/ 
                            console.log(err);
                        } else { 
                            console.log("Success")
                            res.render("welcome")
                        } 
                    })
                } else { 
                    res.render("registerFailure",{msg0:MSG_INVALID_PASSWORD, msg1:"", msg2:""})
                }
            } else { 
                res.render("registerFailure",{msg0:MSG_INVALID_USER, msg1:"", msg2:"" })
            }
        } else {
            res.render("registerFailure",{msg0:MSG_ERROR_REGISTER, msg1:"", msg2:""})
        }   
    }
const signupresponse = (req, res) => {
    Register.findOne({username: req.body.email}, function(err, foundUser){ 
        if(!err){ /
            if(!foundUser){
                console.log("Usuário não encontrado")
                res.render("registerFailure",{msg0:MSG_NOT_FOUND_REGISTER_0, msg1:MSG_NOT_FOUND_REGISTER_1, msg2:MSG_NOT_FOUND_REGISTER_2 })
                }
            else { 
                User.findOne({username: req.body.email}, 
                    foundRegisterUser(err, foundUser)
                    )
            } 
        } else {
            res.render("registerFailure",{msg0:MSG_ERROR_REGISTER, msg1:"", msg2:"" })
        }
    })
}

module.exports = signupresponse

我尝试导出到 app.js

const signupResponse = require("./funcoes/signupResponse")
app.post("/signup", signupResponse)

这个返回ReferenceError: res is not defined 但是当我将所有内容放入 signupResponse 并再次导出时,效果很好:

const signupresponse = (req, res) => {
    Register.findOne({username: req.body.email}, function(err, foundUser){ 
        if(!err){ 
            if(!foundUser){
                console.log("Usuário não encontrado")
                res.render("registerFailure",{msg0:MSG_NOT_FOUND_REGISTER_0, msg1:MSG_NOT_FOUND_REGISTER_1, msg2:MSG_NOT_FOUND_REGISTER_2 })
                }
            else { 
                User.findOne({username: req.body.email}, function(err, foundUser) {
                    if(!err){
                        console.log("Não tivemos erros")
                        if(!foundUser){
                            if(req.body.password == req.body.passwordConfirmation){ 
                                User.register({username: req.body.email}, req.body.password, function(err, user){
                                    if (err){/ 
                                        console.log(err);
                                    } else { 
                                        console.log("Success")
                                        res.render("welcome")
                                    } 
                                })
                            } else { 
                                res.render("registerFailure",{msg0:MSG_INVALID_PASSWORD, msg1:"", msg2:""})
                            }
                        } else { 
                            res.render("registerFailure",{msg0:MSG_INVALID_USER, msg1:"", msg2:"" })
                        }
                    } else {
                        res.render("registerFailure",{msg0:MSG_ERROR_REGISTER, msg1:"", msg2:""})
                    } 
                })
            } 
        } else {
            res.render("registerFailure",{msg0:MSG_ERROR_REGISTER, msg1:"", msg2:"" })
        }
    })
}

module.exports = signupresponse

该应用运行良好且不返回任何错误。 当有很多功能要导出时,我不知道如何使用 module.exports。 如何导出此 signupResponse 并将另一个函数放入其中而不会出错? 谢谢!

【问题讨论】:

  • 试试这个:module.exports = { signupresponse }。它现在是一个带有 signupresponse 键的对象。
  • 这个返回:错误:Route.post() 需要一个回调函数但是得到了一个[object Object]

标签: javascript node.js express module.exports


【解决方案1】:

不是export的问题,而是''res''变量的作用域问题。

在第一个代码示例中,您遇到此错误是因为您尝试访问 foundRegisterUser 内的 res 对象,但此函数不知道 res 对象。您在其他函数signupresponse 中定义了一个res 对象,而 res 对象仅存在于其中。 foundRegisterUser对此一无所知。

它在您的第二个示例中有效,因为在这种情况下您没有res 的范围问题:所有内容都在同一个函数中,然后您的回调可以访问 res 对象。

使您的第一个示例工作的一种方法是将foundRegisterUser 的定义放在signupresponse 中,如下所示:

const signupresponse = (req, res) => {
    const foundRegisterUser = function(err, foundUser){ ... };
    Register.findOne({username: req.body.email}, function(err, foundUser){...

它不会是最漂亮的,并且会给结构改进留出足够的空间,但它应该可以工作。

【讨论】:

  • 谢谢!我解决了这个问题,我在foundRegisterUser里面传req, res: const foundRegisterUser = (req, res) => function(err, foundUser) { ...}
猜你喜欢
  • 2021-10-25
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多