【发布时间】:2020-12-30 22:28:02
【问题描述】:
我正在从事一个项目,但我被困在这件事上。我不知道是我遗漏了什么还是失败了
我想以这种方式使用Express 框架呈现自定义元素:
首先我有我以这种方式声明组件的视图文件:
render.js来自一个组件
<my-component><!-- # include virtual="/my-path" --></my-component>
然后,在另一个文件(在另一个组件中)我收到这样的请求:
server.js 来自另一个组件。
app.get('/my-path', (req, res) => {
res.send(render())
}
其中render() 方法返回一个html,例如<div>hello</div>。
并且my-component 默认不渲染:
my-component.js
class WebComponent extends HTMLElement{
connectedCallback() {
console.log('connected component');
}
}
export default WebComponent;
在这里,我预期的工作流程是:
- 加载视图 (render.js)。
-
my-component打电话给/my-path因为<!-- # include virtual="/my-path" --> - 组件被
/my-path返回的HTML“填充”。 - 查看由服务器渲染到客户端的 Web 组件。
但是它不起作用,组件没有渲染并且是空的。
我已测试访问http://localhost:XXXX/my-path,浏览器正确输出结果。
另外,自定义组件将消息显示到console.log('connected component');,因此组件存在并启动。
但是没有调用路径my-path...为什么?我错过了什么还是我弄错了?也许我需要渲染 Web 组件,但这不是来自服务器的 SSI 渲染?
我还手动触发了服务器中的my-path 路由以检查是否需要调用,但它也不起作用。
编辑: 我将进行编辑以更好地解释:
我以这种方式在服务器端加载 Web 组件(或者我想我会这样做):
- 构建并创建
page.js文件 - 使用
<script src="/my-path/page.js"></script>进入布局 - 在
server.js中使用:app.use('/my-path', express.static('./build'));
提前致谢。
【问题讨论】:
-
渲染你的 web 组件服务器端并不意味着你的组件实际上运行在服务器端。直到它到达客户端并调用
customElements.define(),Web 组件才会获得功能。 -
我构建 Web 组件并使用
<script src="/my-path/page.js"></script>加载到布局中(其中存在customElements.define行)。那么组件是在客户端加载而不是在服务器端加载的吗? -
否,组件不会被加载到服务器端,因为它是一种客户端技术。但是您可以从您的组件和客户端向
/my-path发出 HTTP 请求,以获取您的组件的数据。
标签: javascript express server-side-rendering ssi