Angular Universal应用无法向我的Heroku节点API发出发布请求

时间:2018-07-09 13:02:42

标签: node.js angular express serverside-rendering angular-universal

我的网站是使用Angular构建的SPA,但它使用SSR和Angular Universal来提供可抓取的社交媒体共享内容。

我的服务器中的所有GET请求都由Universal处理,如下所示:

app.engine(


'html',
  ngExpressEngine({
    bootstrap: ServerAppModuleNgFactory,
    providers: [provider]
  })
)

app.set('view engine', 'html')
app.set('views', __dirname)

app.use('/', express.static('./dist', {index: false}))
app.use('/', expressStaticGzip('./dist', {
  enableBrotli: true
}))

app.get('/*', (req, res) => {
    res.render('./dist/index', {
        req: req,
        res: res
    })
})

和我的页面内容是由Angular Services POST请求提供的,该请求使用与所请求网址相同的queryParam构建。

一个例子:

如果用户访问URL https://mywebsite.com/products?page=1&itemsPerPage=12(默认情况下为GET请求),则Angular Universal应用和Angular Router将动态构建我的页面模板,并且产品列表由触发该请求的POST请求的服务提供网址:https://mywebsite.com/request-products,正文中包含以下参数:

{
    page: 1,
    itemsPerPage: 12
}

然后,Universal App使用一些* ngFor指令构建模板,以在将其提供给客户端之前填充该模板。

这种方法使Webcrawlers可以看到我的所有页面,而且我还获得了Single Page Application的好处。

在测试应用程序时,我将构建Angular应用程序,同时构建浏览器和服务器,并按如下所示设置环境:

export const environment = {
  production: true,
  apiUrl: 'http://localhost:7070/'
}

并在localhost中提供我的应用程序,它运行完美,没有错误。如前所述,我的POST请求都得到了很好的处理。但是,当我尝试将apiUrl设置为'https://mywebsite.com/'并在本地主机中提供我的应用程序以直接访问托管在Heroku中的API时,我只是无法访问POST路由。

我在Heroku中的节点快速服务器应用程序配置为接受来自其他域的请求,我可以在本地主机服务器中正常访问它,但是当我尝试通过Angular Universal服务器内部版本访问它时,它将无法正常工作。

我知道我必须在Universal Apps中使用绝对URL,并且我已经在使用它了,但是它不起作用。

有人知道我需要通过https访问Angular Universal Apps中的外部API吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我已经找到了问题,这确实很简单。

事实证明,我必须在绝对网址中使用“ www”,例如:

'https://www.mywebsite.com/'

现在,无论是在我的本地主机还是在heroku服务器上,一切都可以完美运行。

感谢大家花了一些时间阅读我的问题!