【问题标题】:Loopback throws UrlNotFoundError out of the boxLoopback 抛出 UrlNotFoundError 开箱即用
【发布时间】:2017-04-20 02:50:36
【问题描述】:

我一直在按照ToptalDeveloping APIs with Node.js and LoopBack.io 上描述的如何使用 Loopback 设置 Node.js 应用程序的说明进行操作。按照这些步骤,当我尝试访问应用程序的 REST API 时收到 UrlNotFoundError。

重现步骤:

  1. 安装了 Strongloop 命令行:$ npm install -g strongloop
  2. 运行 Loopback 的应用程序生成器:$ slc loopback
  3. 运行项目:$ node .终端显示如下
    Web server listening at: http://0.0.0.0:3000 Browse your REST API at http://0.0.0.0:3000/explorer
  4. 浏览 REST API。
  5. 尝试使用提供的模型 POST 到 /Users。

这会导致以下响应:

{
  "error": {
    "statusCode": 404,
    "name": "Error",
    "message": "Cannot POST /api/Users",
    "status": 404,
    "stack": "Error: Cannot POST /api/Users\n    at raiseUrlNotFoundError (/Repos/loopback-test/node_modules/loopback/server/middleware/url-not-found.js:20:17)\n    at Layer.handle [as handle_request] (/Repos/loopback-test/node_modules/loopback/node_modules/express/lib/router/layer.js:95:5)\n    at trim_prefix (/Repos/loopback-test/node_modules/loopback/node_modules/express/lib/router/index.js:312:13)\n    at /Repos/loopback-test/node_modules/loopback/node_modules/express/lib/router/index.js:280:7\n    at Function.process_params (/Repos/loopback-test/node_modules/loopback/node_modules/express/lib/router/index.js:330:12)\n    at next (/Repos/loopback-test/node_modules/loopback/node_modules/express/lib/router/index.js:271:10)\n    at /loopback-test/node_modules/loopback/node_modules/async/dist/async.js:486:20\n    at replenish (/Repos/loopback-test/node_modules/loopback/node_modules/async/dist/async.js:879:29)\n    at /loopback-test/node_modules/loopback/node_modules/async/dist/async.js:888:13\n    at eachLimit$1 (/Repos/loopback-test/node_modules/loopback/node_modules/async/dist/async.js:3136:26)\n    at Object.<anonymous> (/Repos/loopback-test/node_modules/loopback/node_modules/async/dist/async.js:920:20)\n    at restApiHandler (/Repos/loopback-test/node_modules/loopback/server/middleware/rest.js:63:11)\n    at Layer.handle [as handle_request] (/Repos/loopback-test/node_modules/loopback/node_modules/express/lib/router/layer.js:95:5)\n    at trim_prefix (/Repos/loopback-test/node_modules/loopback/node_modules/express/lib/router/index.js:312:13)\n    at /Repos/loopback-test/node_modules/loopback/node_modules/express/lib/router/index.js:280:7\n    at Function.process_params (/Repos/loopback-test/node_modules/loopback/node_modules/express/lib/router/index.js:330:12)"
  }
}

我尝试过的:

  • 按照 Toptal 帖子中的说明设置并连接到数据库。
  • 在设置 Loopback 项目时尝试了 API 项目和示例 Notes 项目(上面的第 2 步)。
  • 将该项目与我正在处理的另一个 Loopback 项目进行比较,其中 REST API 工作。不幸的是,我没有足够的经验来发现任何重大差异。
  • 实施自定义模型(如 Toptal 帖子和 Youtube 视频中所示)并尝试通过 REST API 访问它。
  • 搜索 raiseUrlNotFoundError。最热门的是this issue on GitHub,它提供了指向a SO question 的(死)链接。
  • 尝试在与标准 3000 不同的端口上运行项目,以防其他项目出现问题。
  • 将常用模型的automigration 设置到数据库。向数据库添加了用户和访问令牌,并尝试在 REST API Explorer 中使用该访问令牌。

我运行 Mac OS X,版本 10.11.6。我已经安装了 Node、npm 和其他必要的工具。

我缺少什么,或者我可以做些什么来避免出现 raiseUrlNotFoundError 并访问我的项目的 REST API?

【问题讨论】:

    标签: node.js loopbackjs strongloop


    【解决方案1】:

    我知道这不是一个非常好的解决方案,但它确实是(使用 win 10 64 位)。 我在创建应用程序 slc loopback 并选择 Loopback version 3.X 时遇到了完全相同的错误,当重新创建应用程序并选择 Loopback version 2.X 时,api 工作正常,这可能是您的项目之间的不同。

    【讨论】:

    • 啊,没试过!晚上回家试试。
    • 是的,就是这样。使用 Loopback 2.x 创建应用程序运行良好。正如您所建议的,现有项目也在运行 2.x 版。谢谢!
    【解决方案2】:

    要让它运行,只需安装 api-explorer

    npm install --save loopback-component-explorer --save
    

    并按如下方式注册路由:

    在根文件夹的目录结构中有一个名为“server”的文件夹。在“server”文件夹中创建一个名为“component-config.json”的空文件,并将以下代码放入其中:

    {
      "loopback-component-explorer": {
        "mountPath": "/explorer"
      }
    }
    

    现在您应该可以使用 URL http://0.0.0.0:3000/explorer 打开资源管理器页面了。

    【讨论】:

      【解决方案3】:

      loopback 3.x 解决了这个问题,所以现在就试试吧。如果您仍然遇到同样的问题,请按照以下说明操作:

      要删除此警告,请禁用由内置 REST 处理程序添加的上下文中间件。将server/config.json中的remoting.context属性设置为false;

          {
        "remoting": {
          "context": false,
          // etc.
        },
        // etc.
      }
      

      更多信息:http://loopback.io/doc/en/lb2/Using-current-context.html

      【讨论】:

      • 谢谢。我目前不在项目上工作,也无法访问环境,但很高兴听到它现在应该在 3.x 中工作。
      猜你喜欢
      • 2013-08-29
      • 2013-10-26
      • 1970-01-01
      • 2011-01-17
      • 2017-01-03
      • 2017-12-15
      • 2015-06-25
      • 2015-01-07
      • 1970-01-01
      相关资源
      最近更新 更多