如何使用 Angular ssr 从浏览器与express.js 服务器进行通信?

问题描述 投票:0回答:2

我遇到了一个 SSR 问题,不知何故 Angular 文档和新的 Angular 开发文档都没有提供有关它的信息,或者至少我没有找到任何信息。

我想知道如何将数据从浏览器传输到服务器,因为使用 TransferState API 反向传输数据非常简单。对我来说,这也有点奇怪,没有与其他方式类似的 TransferState,或者 TransferState API 不是双向的。

我尝试在

server.ts
函数文件的
app()
中添加一条后置路由,如下所示:

server.post('/test', (req, res, next) => {
    console.log('The Body of the Request: ', req.body)
    res.send("Got the request!")
})

但是每当我尝试在浏览器中调用这样的路线时:

readonly #http = inject(HttpClient)

testEndpoint() {
    this.#http.post('http://localhost:4200/test', {hello: 'world'}).subscribe(console.log)
}

但是当我尝试在浏览器中这样调用它时:

if (isPlatformBrowser(this.platformID)) {
    this.#service.testEndpoint()
}

它返回“NG04002”,这基本上意味着 RouterModule/Router 找不到该路由。 这对我来说没有意义,但也许我错过了一些明显的东西。

另请注意,我提供的代码只是伪代码,可能不是有效的 javascript/typescript 代码,因为我目前无法访问我的真实代码库。如果这还不足以查明错误,请告诉我,只要问题得到解决,我就会添加所需的所有内容。

angular express angular-universal angular-ssr
2个回答
0
投票

SSR 旨在

prerendering
服务器上的内容并在客户端上进行水化(或不水化),它不是用于编写
node.js
代码的 Web 服务器。

因为无论你选择哪条路线,Angular 都会搜索该路线对应的 Angular 路线!

而是在端口

node.js
或除
4000
(默认角度服务器端口)之外的任何端口运行单独的
4200
服务器,并通过此单独的服务器进行 api 调用!


0
投票

我找到了解决问题的方法。 Angular 17 在运行 ngserve 时显然会忽略 server.ts 文件,并且仅在使用 ng build 进行构建并随后执行 .mjs 文件时才考虑。这是因为 Angular 使用内部开发服务器,而不是您在 server.ts 中提供的服务器。

https://github.com/angular/angular-cli/issues/26472 https://github.com/angular/angular-cli/issues/26323

这些 github 问题也是由像我这样的困惑的人提出的,但从我得到的情况来看,这是定义的行为。 据我所知,官方 Angular 文档中没有记录这一点。

© www.soinside.com 2019 - 2024. All rights reserved.