TypeError:无法设置属性&#39; user&#39;未定义的<br>&nbsp; &nbsp; at [file path] sqlite3

时间:2020-09-05 18:25:48

标签: javascript node.js sqlite express express-session

在登录时验证凭据时尝试为用户设置会话时,我收到未定义的错误。我正在尝试使用express-session为用户创建会话,但没有将其直接导入文件中(被指导不要这样做),但是不确定如何解决给定的错误。任何帮助和见解将不胜感激!

终点:

router.post("/login", async (req, res, next) => {
    try {
        const { username, password } = req.body

        // * checks for record existence in db, assigns record to var for access
        const user = await users_access.findByFilter({ username })
        if (!user) {
            return res.status(401).json({ message: 'invalid crededentials' });
        }

        // * compares the entered password to the hash on record 
        const passwordValid = await secure.compare(password, user.password)

        // * handling invalid responses + creating session

        if (!passwordValid) {
            return res.status(401).json({ message: 'invalid credentials' });
        }

        req.session.user = user

        res.json({ message: `welcome, ${user.username}!`})

    } catch(error) { 
        next(error) 
    }
});

应用程序模型:

// * add users to the datbase
// * inserts argument into user table in db access 
// * returns a user found by id
const add = async (user) => {
    const [id] = await database_access("users")
        .insert(user)
    return findById(id)
}

// * find user record with username and password 
const find = () => {
    return database_access("users").select("id", "username")
}


// * find user by filter 
const findByFilter = (filter) => {
    return database_access("users")
        .select("id", "username", "password")
        .where(filter)
        .first()
}


// * find user with id
const findById = (id) => {
    return database_access("users")
        .select("id", "username")
        .where({ id }) // desctructuring id from the request 
        .first()
}

module.exports = { 
    add, 
    find,
    findByFilter,
    findById
}

如果您需要查看任何其他代码来进行评估,我很乐意提供,但是相信这是每个​​错误响应所引起的问题。谢谢你!

1 个答案:

答案 0 :(得分:0)

因此,我想您正在使用服务器条目文件express-sessionapp.jsserver.js中的index.js模块,但是您将其称为。<​​/ p>

此登录处理程序必须在会话可用的上下文中使用。

我认为您想要的不是针对此特定路由器的单元测试,而是用于在您的应用程序上下文中测试此路由器的集成测试。

这就是我从您提供的信息中可以看到的全部。如果这还不够有用,也许您可​​以向我们展示您的服务器主文件。以及如何使用此路由器。