angular - 安全运行 Angular Universal
问题描述
我在运行 Angular Universal 开发服务器以进行动态服务器端渲染时遇到问题。在我的应用程序中,我向安全主机(https://...)发出了几个 http 请求,似乎每当我启动 Angular Universal 时,它都会由于混合协议而引发请求。在浏览器中对给定 API 发出相同的请求可以正常工作,并且我可以使用 ssl 运行客户端开发服务器而不会出现问题。
ERROR NetworkError
at XMLHttpRequest.send (/Users/app/dist//server/main.js:137480:19)
at Observable._subscribe (/Users/app/dist/project-name/server/main.js:104370:17)
at Observable._trySubscribe (/Users/app/dist/project-name/server/main.js:99560:25)
at Observable.subscribe (/Users/app/dist/project-name/server/main.js:99546:22)
at DoOperator.call (/Users/app/dist/project-name/server/main.js:214456:23)
at Observable.subscribe (/Users/app/dist/project-name/server/main.js:99541:31)
at CatchOperator.call (/Users/app/dist/project-name/server/main.js:105922:23)
at Observable.subscribe (/Users/app/dist/project-name/server/main.js:99541:31)
at scheduleTask (/Users/app/dist/project-name/server/main.js:141017:32)
at Observable._subscribe (/Users/app/dist/project-name/server/main.js:141055:13)
跟踪中的最后一项指向混合协议错误/抛出server/main.js
,但除此之外,该错误并没有透露太多。
我假设这是因为 Angular Universal 正在连接一个不安全的端口并且 API 请求失败,但是无论出于何种原因,即使在修改server.ts
文件之后它仍然不想通过 https 连接。
在对我的server.ts
文件进行更改以支持 https 之后,这就是我所拥有的(通过 openssl 为 localhost 生成的证书)。在此之前,我使用的是 Angular Universal 提供的默认样板。
export function app(): express.Express {
const server = express();
const distFolder = join(process.cwd(), 'dist/project-name/browser');
const indexHtml = existsSync(join(distFolder, 'main.original.html')) ? 'main.original.html' : 'main';
server.engine('html', ngExpressEngine({
bootstrap: AppServerModule,
}));
server.set('view engine', 'html');
server.set('views', distFolder);
server.get('*.*', express.static(distFolder, {
maxAge: '1y'
}));
server.get('*', (req, res) => {
res.render(indexHtml, { req, providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }] });
});
return server;
}
function run(): void {
const port = process.env.PORT || 4000;
const server = app();
let sslOptions = {
key: fs.readFileSync('server.key'),
cert: fs.readFileSync('server.cert')
};
https.createServer(sslOptions, server).listen(port)
}
内angular.json
:
"serve-ssr": {
"builder": "@nguniversal/builders:ssr-dev-server",
"options": {
"ssl": true,
"browserTarget": "project-name:build",
"serverTarget": "project-name:server"
},
"configurations": {
"production": {
"browserTarget": "project-name:build:production",
"serverTarget": "project-name:server:production"
}
}
},
每当启动发生时,我都会收到消息** Angular Universal Live Development Server is listening on http://localhost:4200, open your browser on http://localhost:4200 **
,但 http 或 https 请求都没有得到响应。
任何帮助,将不胜感激!
解决方案
推荐阅读
- regex - 将正则表达式或 htaccess url.com/city-randomcity/ 重定向到 url.com/randomcity/
- c# - 无法写入自定义事件日志
- java - 即使应用程序未运行,如何每天更新 TextView?
- python - 使用 LidarLite-python 代码进行距离测量
- python - AttributeError:“unicode”对象没有属性“css”
- join - 如何在mysqli中加入一个表,然后在表内加入表?
- node.js - 无法在 nodejs 上启动服务器
- python - 在自定义类型映射中重用 SWIG 映射
- python - 反转数据框中的每 n 行
- python - Django Sqlite3 编程错误