Javascript 角度9 SSR参考错误:未定义stripe.elements

Javascript 角度9 SSR参考错误:未定义stripe.elements,javascript,server-side-rendering,angular9,stripes,Javascript,Server Side Rendering,Angular9,Stripes,对于我的项目Angular 9,我必须安装服务器端渲染(SSR),我遵循官方教程。一开始我的问题是窗口没有定义。因此,我决定用domino安装SSR,并遵循本教程,但在程序构建项目时遇到了一个问题:元素未定义。(const elements=stripe.elements()无法读取未定义的元素的属性) 下面是我的server.ts代码 导入“zone.js/dist/zone节点”; 从“@nguniversal/express引擎”导入{ngExpressEngine}; 从“快递”以快递

对于我的项目Angular 9,我必须安装服务器端渲染(SSR),我遵循官方教程。一开始我的问题是窗口没有定义。因此,我决定用domino安装SSR,并遵循本教程,但在程序构建项目时遇到了一个问题:元素未定义。(
const elements=stripe.elements()
无法读取未定义的
元素的属性)

下面是我的server.ts代码

导入“zone.js/dist/zone节点”;
从“@nguniversal/express引擎”导入{ngExpressEngine};
从“快递”以快递方式导入*;
从“路径”导入{join};
从“@angular/common”导入{APP_BASE_HREF};
从“fs”导入{existsSync};
从“快速服务静态核心”导入*作为核心;
const domino=require('domino');
常数fs=要求('fs');
const path=require('path');
//使用浏览器index.html作为模拟窗口的模板
常量模板=fs
.readFileSync(path.join(join(process.cwd(),'dist/captn/browser'),'index.html'))
.toString();
//全局窗口和文档对象的垫片。
const window=domino.createWindow(模板);
全局['window']=窗口;
全局['document']=window.document;
全局['navigator']=window.navigator;
全局['screen']=window.screen;
全局['Event']=null;
全局['window']=窗口;
全局['document']=window.document;
全局['branch']=null;
全局['object']=window.object;
全局['localStorage']=window.localStorage;
全局['navigator']=window.navigator;
全局['elements']=window.elements;
全局['elements']=null;
全局['Event']=null;
全局['KeyboardEvent']=null;
全局['stripe']=window.stripe;
window.screen={deviceXDPI:0,logicalXDPI:0};
全局['MouseEvent']=window.MouseEvent;
声明接口窗口{
Stripe:any;//或者您也可以在此文件中为此定义一个类型
条带:空;
元素:空;
}
从“./src/main.server”导入{AppServerModule};
//导出Express应用程序,以便无服务器功能可以使用它。
导出函数app():core.Express{
const server=express();
const distFolder=join(process.cwd(),'dist/captn/browser');
const indexHtml=existsSync(join(distFolder,'index.original.html'))?'index.original.html':'index';
//我们的环球快递引擎(找到@https://github.com/angular/universal/tree/master/modules/express-engine)
server.engine('html',ngExpressEngine({
引导:AppServerModule,
}));
set('view engine','html');
server.set('views',distFolder);
//示例Express Rest API端点
//get('/api/**',(req,res)=>{});
//从/浏览器提供静态文件
server.get('*.',express.static(distFolder{
maxAge:'1y'
}));
//所有常规路线均使用通用发动机
server.get('*',(req,res)=>{
res.render(indexHtml,{req,providers:[{provide:APP_BASE_HREF,useValue:req.baseUrl}]});
});
返回服务器;
}
函数运行(){
const port=process.env.port | 4000;
//启动节点服务器
const server=app();
服务器。侦听(端口,()=>{
log(`Node Express服务器正在侦听http://localhost:${port}`);
});
}
//Webpack将“require”替换为“\uuu Webpack\uu require\uuuuu”
//“\u非\u网页包\u require\u”是节点“require”的代理
//以下代码用于确保服务器仅在不需要捆绑包时运行。
声明const非web包需要:NodeRequire;
const main module=\uuuuu非\uu网页包\uu require\uuuuuuu.main;
const moduleFilename=mainModule&&mainModule.filename | |“”;
if(moduleFilename==uu文件名| | moduleFilename.includes('iisnode')){
run();
}

从“./src/main.server”导出*您是否在应用程序的每个位置都使用stripe?我会在相关模块的付款部分使用它,并将其连接到延迟加载。这样你就可以使用一个进口的条纹? 就像这里: