【问题标题】:TypeError with async/await and express routing带有异步/等待和快速路由的 TypeError
【发布时间】:2018-09-09 21:56:56
【问题描述】:

这里的相对初学者,我遇到了 express 和 async/await 函数的问题,以及未处理的 Promise 拒绝。

这是我在客户端的代码,从页面中获取用户名和密码并将其发送过来。

async function signIn() {
    let username = document.getElementById('username').value
    let password = document.getElementById('password').value

    let url = '/api/login'
    url += '?username=' + username
    url += '&password=' + password

    const response = await fetch(url)
    console.log(response)
}

这是我对应的服务器函数:

app.post('/api/login', function (req, res) {
    console.log("I'll log you in")
}

在那之后有一些代码确实会登录,但这就是我创建我遇到的错误所需要的全部内容。

这是我在 safari 11.03 中遇到的错误:

Unhandled Promise Rejection: TypeError: Type error

这是 Firefox 59.0.1 中的错误:

TypeError: NetworkError when attempting to fetch resource.

我希望有人可以在这里帮助我。

谢谢。

【问题讨论】:

  • 您的fetch 是否返回了 Promise?它应该让await 工作developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 您正在使用您的快速代码定义“POST”方法,但我猜fetch 默认使用“GET”。也许尝试将app.post(... 更改为app.get(... 看看是否有结果。您是否在服务器日志中看到控制台“我会让您登录”?
  • 无论我使用 app.get 还是 app.post,我都会得到相同的结果,而且我没有在我的服务器日志上看到“我会让你登录”????

标签: javascript express ecmascript-6 async-await fetch-api


【解决方案1】:

为了处理承诺拒绝,您可以在const response = await stuff 周围放置一个try/catch 块:

let response;
try {
  response = await fetch(url)
catch(err) {
  // do stuff with error
}

(如果你想要一个差异格式:how use const in try catch block

至于错误本身,你还知道什么吗?您可以分享更多代码或服务器的错误消息吗?让我知道,当您发布更新的信息时,我会编辑此答案。

【讨论】:

  • 好吧,当我将 app.post('/api/login', function (req, res) { console.log("I'll log you in") } 替换为 app.post('/api/login', function (err) { if (err) { console.error(err) } pastebin.com/a6yPAwHf 时会发生什么(警告,800 行长)
  • 其余的代码并没有改变任何东西——即使我完全删除了它,但如果你想试一试,我会给你一个 github 链接。
  • 当然,那会很有帮助
  • 啊哈。如果你想在你的路由中添加一个错误处理程序,它有四个参数err, req, res, next。您记录的是整个请求对象。将此添加到您的路线上方的app.jsapp.use((err, req, res, next) => { console.log(err); res.send(err); })
猜你喜欢
  • 2018-07-09
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
  • 1970-01-01
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
相关资源
最近更新 更多