我的网站是使用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吗?
谢谢!
答案 0 :(得分:1)
我已经找到了问题,这确实很简单。
事实证明,我必须在绝对网址中使用“ www”,例如:
现在,无论是在我的本地主机还是在heroku服务器上,一切都可以完美运行。
感谢大家花了一些时间阅读我的问题!