Loopback 立即抛出 UrlNotFoundError
Loopback throws UrlNotFoundError out of the box
我一直在按照 Toptal and Developing APIs with Node.js and LoopBack.io 中描述的有关如何使用 Loopback 设置 Node.js 应用程序的说明进行操作。按照这些步骤,当我尝试访问应用程序的 REST API 时收到 UrlNotFoundError。
重现步骤:
- 安装了 Strongloop 命令行:
$ npm install -g strongloop
- 运行 Loopback 的应用程序生成器:
$ slc loopback
.
- 运行项目:
$ node .
终端显示如下
Web server listening at: http://0.0.0.0:3000
Browse your REST API at http://0.0.0.0:3000/explorer
- 浏览 REST API。
- 尝试使用提供的模型 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 (/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 post 中的说明设置并连接到数据库 post。
- 在设置 Loopback 项目(上述第 2 步)时尝试了 API 项目和示例 Notes 项目。
- 将项目与我正在处理的另一个 Loopback 项目进行了比较,其中 REST API 工作。不幸的是,我没有足够的经验来发现任何显着差异。
- 实施自定义模型(如 Toptal post 和 Youtube 视频中所示)并尝试通过 REST API.
访问它
- 搜索了 raiseUrlNotFoundError。最好的命中是this issue on GitHub which provides a (dead) link to a SO question.
- 尝试 运行将项目连接到与标准 3000 不同的端口,以防其他项目出现问题。
- 将常用模型设置automigration到数据库。向数据库添加了一个用户和一个访问令牌,并尝试在 REST API 资源管理器中使用该访问令牌。
I 运行 Mac OS X,版本 10.11.6。我已经安装了 Node、npm 和其他必要的工具。
我错过了什么,或者我能做些什么来避免收到 raiseUrlNotFoundError,并为我的项目访问 REST API?
我知道这不是一个很好的解决方案,但它确实不错(使用 win 10 64 位)。
我在创建应用程序 slc loopback
并选择环回版本 3.X 时遇到了完全相同的错误,当重新创建应用程序并选择环回版本 2.X 时,api 工作正常,可能就是这样您的项目之间有所不同。
要使其 运行 只需安装 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.x 解决,所以请立即尝试。如果您仍然遇到同样的问题,请按照以下说明操作:
要删除此警告,请禁用内置 REST 处理程序添加的上下文中间件。将server/config.json中的remoting.context属性设置为false;
{
"remoting": {
"context": false,
// etc.
},
// etc.
}
更多信息:http://loopback.io/doc/en/lb2/Using-current-context.html
我一直在按照 Toptal and Developing APIs with Node.js and LoopBack.io 中描述的有关如何使用 Loopback 设置 Node.js 应用程序的说明进行操作。按照这些步骤,当我尝试访问应用程序的 REST API 时收到 UrlNotFoundError。
重现步骤:
- 安装了 Strongloop 命令行:
$ npm install -g strongloop
- 运行 Loopback 的应用程序生成器:
$ slc loopback
. - 运行项目:
$ node .
终端显示如下
Web server listening at: http://0.0.0.0:3000 Browse your REST API at http://0.0.0.0:3000/explorer
- 浏览 REST API。
- 尝试使用提供的模型 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 (/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 post 中的说明设置并连接到数据库 post。
- 在设置 Loopback 项目(上述第 2 步)时尝试了 API 项目和示例 Notes 项目。
- 将项目与我正在处理的另一个 Loopback 项目进行了比较,其中 REST API 工作。不幸的是,我没有足够的经验来发现任何显着差异。
- 实施自定义模型(如 Toptal post 和 Youtube 视频中所示)并尝试通过 REST API. 访问它
- 搜索了 raiseUrlNotFoundError。最好的命中是this issue on GitHub which provides a (dead) link to a SO question.
- 尝试 运行将项目连接到与标准 3000 不同的端口,以防其他项目出现问题。
- 将常用模型设置automigration到数据库。向数据库添加了一个用户和一个访问令牌,并尝试在 REST API 资源管理器中使用该访问令牌。
I 运行 Mac OS X,版本 10.11.6。我已经安装了 Node、npm 和其他必要的工具。
我错过了什么,或者我能做些什么来避免收到 raiseUrlNotFoundError,并为我的项目访问 REST API?
我知道这不是一个很好的解决方案,但它确实不错(使用 win 10 64 位)。
我在创建应用程序 slc loopback
并选择环回版本 3.X 时遇到了完全相同的错误,当重新创建应用程序并选择环回版本 2.X 时,api 工作正常,可能就是这样您的项目之间有所不同。
要使其 运行 只需安装 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.x 解决,所以请立即尝试。如果您仍然遇到同样的问题,请按照以下说明操作:
要删除此警告,请禁用内置 REST 处理程序添加的上下文中间件。将server/config.json中的remoting.context属性设置为false;
{
"remoting": {
"context": false,
// etc.
},
// etc.
}
更多信息:http://loopback.io/doc/en/lb2/Using-current-context.html