【问题标题】:Sapper & Polka AuthenticationSapper & Polka 认证
【发布时间】:2021-03-20 05:58:24
【问题描述】:

我正在尝试使用 svelte & sapper 以及 polka 通过 arangodb (arangojs) 创建一个简单的身份验证。 所以我在节点服务器方面相当缺乏经验。

在我的login.svelte 中,我正在发送请求:

const response = await fetch("/login",
{
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({username: event.target[0].value, password: event.target[1].value})
}).catch((error => console.error(error)))

这将因为sapper 调用路由目录中的login.ts 文件。因为我正在发送一个 post 请求,所以它会查找一个名为 post 的函数:

import Database from '../server/database/index'

export async function post(req, res, next) {
    try {
        const DB = await Database.getInstance(req.body.username, req.body.password)
        await DB.createCollections()
        const sessionToken = await DB.getDatabase().login(req.body.username, req.body.password)

        if (!sessionToken) throw new Error('no session token received')

        req.session = {}
        req.session.user = true
        req.session.refresh_token = sessionToken
        res.end()
        next()

        return res
    } catch (error) {
        console.error('login.ts:post', error)
    }
}

在这里我尝试登录数据库。成功后,我会收到一个sessionToken,据我所知,我需要在前端“登录”。

回到我的login.svelte,我收到了回复。但是尸体不见了,我就是不明白为什么。

这可能是因为我忘记了我的server.ts 中的某些内容

try {
   polka()
   .use(bodyparser.json())
   .use(
      compression({ threshold: 0 }),
      sirv('static', { dev }),
      sapper.middleware()
   )
   .listen(PORT, (err: any) => {
      if (err) console.log('error', err)
   })
} catch (error) {
   console.error('error on server API', error)
}

但是我没有找到太多可以帮助我理解我面临的问题的东西。

亲切的问候

【问题讨论】:

    标签: arangodb svelte sapper polka


    【解决方案1】:

    我没有收到回复的原因很简单。我必须像这样将数据添加到res.end() 函数中:

    export async function post(req, res, next) {
        try {
            const DB = await Database.getInstance(req.body.username, req.body.password)
            await DB.createCollections()
            const sessionToken = await DB.getDatabase().login(req.body.username, req.body.password)
    
            if (!sessionToken) throw new Error('no session token received')
    
            res.end(JSON.stringify(sessionToken))
            next()
    
            return res
        } catch (error) {
            console.error('login.ts:post', error)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-20
      • 1970-01-01
      • 2020-02-22
      • 2021-06-11
      • 2020-09-21
      • 1970-01-01
      • 2020-11-27
      • 2020-02-21
      相关资源
      最近更新 更多