Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'executions/190'

Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'executions/190'

我正在尝试模拟我的后端来开发前端,我正在使用库 expressjs 来做这件事。

我有一个名为 data.json 的文件,其中包含如下对象:

"singleExecutions":[
    {"executionId":190, "label":"exe_190"},
    {"executionId":191, "label":"exe_191"}, 
    ...]

我想路由类型为 /executions/executionId 的请求,以获取列表 singleExecutions 中具有我需要的特定 ID 的相应对象。

阅读expressjs的文档,看来我应该这样做:

const express = require('express');
const data = require('./data');

// 1. Create an express router.
const router = express.Router();

// 2. Handle the requests.
router.get('/executions/:executionId', (req, res) => {
  res.json(data.singleExecutions);
});

// 3. Start the server.
mockBackend.start(router); 

注意:上面的一些变量(例如 mockBackend)在代码片段中被跳过,但它们没问题,因为上面未显示的其他请求已正确路由。

当我导航 url /executions/190(例如)时,出现以下异常:

ERROR Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'executions/190'
Error: Cannot match any routes. URL Segment: 'executions/190'
    at ApplyRedirects.noMatchError (webpack-internal:///../../../router/esm5/router.js:1848)
    at CatchSubscriber.eval [as selector] (webpack-internal:///../../../router/esm5/router.js:1813)
    at CatchSubscriber.error (webpack-internal:///../../../../rxjs/_esm5/operators/catchError.js:108)
    at MapSubscriber.Subscriber._error (webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:136)
    at MapSubscriber.Subscriber.error (webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:110)
    at MapSubscriber.Subscriber._error (webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:136)
    at MapSubscriber.Subscriber.error (webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:110)
    at MapSubscriber.Subscriber._error (webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:136)
    at MapSubscriber.Subscriber.error (webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:110)
    at LastSubscriber.Subscriber._error (webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:136)
    at ApplyRedirects.noMatchError (webpack-internal:///../../../router/esm5/router.js:1848)
    at CatchSubscriber.eval [as selector] (webpack-internal:///../../../router/esm5/router.js:1813)
    at CatchSubscriber.error (webpack-internal:///../../../../rxjs/_esm5/operators/catchError.js:108)
    at MapSubscriber.Subscriber._error (webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:136)
    at MapSubscriber.Subscriber.error (webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:110)
    at MapSubscriber.Subscriber._error (webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:136)
    at MapSubscriber.Subscriber.error (webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:110)
    at MapSubscriber.Subscriber._error (webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:136)
    at MapSubscriber.Subscriber.error (webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:110)
    at LastSubscriber.Subscriber._error (webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:136)
    at resolvePromise (webpack-internal:///../../../../zone.js/dist/zone.js:809)
    at resolvePromise (webpack-internal:///../../../../zone.js/dist/zone.js:775)
    at eval (webpack-internal:///../../../../zone.js/dist/zone.js:858)
    at ZoneDelegate.invokeTask (webpack-internal:///../../../../zone.js/dist/zone.js:421)
    at Object.onInvokeTask (webpack-internal:///../../../core/esm5/core.js:4956)
    at ZoneDelegate.invokeTask (webpack-internal:///../../../../zone.js/dist/zone.js:420)
    at Zone.runTask (webpack-internal:///../../../../zone.js/dist/zone.js:188)
    at drainMicroTaskQueue (webpack-internal:///../../../../zone.js/dist/zone.js:595)

肯定是我的 router.get() 中配置不正确,但我不明白是什么...有人可以帮忙吗?

注意:在相同的代码中,如果我导航 GET 请求 /executions,它会被正确路由:

router.get('/executions', (req, res) => {
  res.json(data.executions);
}); 

...其余的都一样。

你必须区分 angular 路由和后端路由。对我来说,您似乎正在导航至 host/port 上对应于 angular 应用程序的 /executions/xxx。此 executions 路由可能不存在于 angular 应用程序中,因此出现错误

您需要在 nodejs 为您的后端使用的 host/port 上导航到该路由。

假设您在开发中并使用 angular-cli,例如您的 angular 应用程序将在 localhost:4200 上,而您的后端将在 localhost:4000 上;所以你需要导航到 http://localhost:4000/executions/xxx

如果您还使用 express 为 angular 应用程序提供相同的 host/same 端口,那么您需要确保在注册之前在 express 中注册了 /executions 路由angular.

的路线