首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在所有请求后在服务器上呈现同构的通量

在所有请求后在服务器上呈现同构的通量
EN

Stack Overflow用户
提问于 2015-05-17 03:58:08
回答 1查看 396关注 0票数 4

只有在http请求被解决之后,我才能找出最好的方式让服务器呈现我的react组件。

例如:

组件A <-组件B <-组件C (C触发一个操作,该操作调用API并返回数据以呈现,同时只是呈现“加载”)。

当检查我的源代码时,我只看到“正在加载”,出于SEO的目的,我希望服务器等待组件C的调用解析并呈现。

从理论上讲,这听起来很简单,因为服务器应该自己调用该操作,并等待操作完成,然后调用react.renderToString(),如下所示:

代码语言:javascript
运行
AI代码解释
复制
server.get('/', function (req, res, next) {
    showMessages({}, function showMessagesCallback() { //add a callback
        var html = React.renderToString(ChatComponent());
        res.send(html);
    });
});

但是,如果多个组件发出操作调用,而我需要等待多个操作得到解决,然后调用renderToString,该怎么办呢

取而代之的是,请求在客户端获得。我的服务器文件:

代码语言:javascript
运行
AI代码解释
复制
/**
 * This leverages Express to create and run the http server.
 * A Fluxible context is created and executes the navigateAction
 * based on the URL. Once completed, the store state is dehydrated
 * and the application is rendered via React.
 */

import express from 'express';
import path from 'path';
import serialize from 'serialize-javascript';
import {navigateAction} from 'fluxible-router';
import debugLib from 'debug';
import React from 'react';
import app from './app';
import HtmlComponent from 'components/Html';
const htmlComponent = React.createFactory(HtmlComponent);

const debug = debugLib('quran-com');

const server = express();
server.set('state namespace', 'App');
server.use('/public', express.static(path.join(__dirname, '/build')));
server.use('/images', express.static(path.join(__dirname, '/client/images')));
server.use('/fonts', express.static(path.join(__dirname, '/client/styles/fonts')));

server.use((req, res, next) => {
    let context = app.createContext();

    debug('Executing navigate action');
    context.getActionContext().executeAction(navigateAction, {
        url: req.url
    }, (err) => {
        if (err) {
            if (err.status && err.status === 404) {
                next();
            } else {
                next(err);
            }
            return;
        }

        debug('Exposing context state');
        const exposed = 'window.App=' + serialize(app.dehydrate(context)) + ';';

        debug('Rendering Application component into html');
        const html = React.renderToStaticMarkup(htmlComponent({
            context: context.getComponentContext(),
            state: exposed,
            markup: React.renderToString(context.createElement())
        }));

        debug('Sending markup');
        res.type('html');
        res.write('<!DOCTYPE html>' + html);
        res.end();
    });
});

const port = process.env.PORT || 8000;
server.listen(port);
console.log('Listening on port ' + port);

export default server;

做这件事最好的方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2015-05-17 23:56:48

你需要重新思考你的应用程序的架构。组件不应该自己获取数据,当某些东西将数据提供给它们时,您会做得更好。

我的建议是在导航操作中这样做,这样它就可以成为任何视图的入口点。然后,您可以在这里解析所有需要的数据,并使用这些数据馈送存储,一旦解析,就调用回调。例如:

代码语言:javascript
运行
AI代码解释
复制
module.exports = {

    navigateAction: function (context, state, done) {
        var completeNavigation = function () {
            context.dispatch('NAVIGATE_DONE');
            done()
        }

        var route = _.last(state.routes);

        debug('navigate to: ' + route.name);

        switch (route.name) {
            case 'products':
                context.executeAction(productActions.loadProducts, null, completeNavigation);
                break;
            default:
                completeNavigation();
                break;
        }

    }

};

在这个示例中,我使用了react-router

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30283218

复制
相关文章
索引迁移
索引迁移工具esm 下载地址:https://github.com/medcl/esm 经过测试发现使用--copy_setting和--copymappings失败。而只用--copymappings也不起作用。 /bin/esm -s=http://192.168.3.206:9200 -d=http://localhost:9200 --copy_settings --copy_mappings -x=bestbuykaggle 手动创建索引,设置mapping和setting。数据导入导出没问
YG
2018/05/23
1.3K0
【迁移】Oracle分区表及索引迁移表空间
近期计划使用XTTS方式迁移某库,在进行自包含检查时发现,该库有部分数据(分区表、索引)存放于SYSTEM表空间中,需要先将这部分数据移动到要迁移的表空间中。
甚至熊熊
2021/04/22
2.5K0
生成的迁移类
EFCore 2.1出来有一段时间了,里面的新功能还没怎么用,今天研究下如何使用EF Core 2.1添加种子数据。
solenovex
2022/11/24
1.1K0
生成的迁移类
迁移学习中的负迁移:综述
迁移移学习(TL)试图利用来自一个或多个源域的数据或知识来促进目标域的学习。由于标记成本、隐私问题等原因,当目标域只有很少或没有标记数据时,它特别有用。
脑机接口社区
2020/11/11
2.3K0
迁移学习中的负迁移:综述
laravel - 根据数据库逆向生成迁移文件
因为平时在用Mybatis的时候可以根据数据库逆向生成文件,我就在想laravel是不是也可以这么做,然后去网上找了一大堆,发现都在推“xethron/migrations-generator”这个库,但是很明显作者从2017年之后,就没有再维护过了,很显然是不适合laravel9.x去用的,所以我找到了一个可以完美平替的库
用砖头敲代码
2023/01/07
1.7K0
医疗机构最终会将业务迁移到云端吗?
在组织的数据被勒索软件加密后,想要恢复几乎是不可能的,因此,预防似乎是最安全的解决方案。第一步是定期创建敏感数据的安全备份。请记住,在勒索软件攻击的情况下,组织需要物理断开存储设备以避免被感染,最好将数据备份在云中而不是内部部署的数据中心。
静一
2018/09/25
5900
动态迁移_动作迁移
在虚拟化环境中的迁移,又分为动态迁移,静态迁移,也有人称之为冷迁移和热迁移,或者离线迁移在线迁移;静态迁移和动态迁移的 区别就是静态迁移明显有一段时间客户机的服务不可用,而动态迁移则没有明显的服务暂停时间,静态迁移有两种1,是关闭客户机将其硬板镜像复制到另一台宿主机系统,然后回复启动起来,这种迁移不保留工作负载,2是,两台客户机公用一个存储系统,关闭一台客户机,防止其内存到另一台宿主机,这样做的方式是,保存迁移前的负载
全栈程序员站长
2022/11/17
1.5K0
idea配置文件迁移
最近换了电脑,idea也重新装了一遍,那么之前很繁琐的配置,现在又要配置一遍吗?不!我们可以迁移配置文件~
阿超
2022/08/16
1.5K0
idea配置文件迁移
[SQLServer大对象]——FileTable从文件系统迁移文件
阅读导航 从文件系统中迁移文件到FileTable 批量加载文件到FileTable 如何批量加载文件到FileTable 通过博文[SQLServer大对象]——FileTable初体验,已经可以将文件加载到数据库中,并查看和访问这些文件。 将文件加载到 FileTable,可以使用工具xcopy或robocopy,也可以自己编写脚本(如PowerShell)或者应用程序,复制文件到FileTable中。 现在说一说文件的迁移。 从文件系统中迁移文件到FileTable 迁移文件条件     文件存储在文
数据分析
2018/03/01
1.4K0
对象迁移空间对索引状态的影响
上篇文章介绍了迁移表、索引对象的操作: http://blog.csdn.net/bisal/article/details/50804714 发现漏了一个细节,就是表、LOB对象移动后索引的状态。
bisal
2019/01/29
5100
Laravel 数据库迁移索引长度问题
Laravel 默认使用 utf8mb4 字符,它支持在数据库中存储 "emojis" 。 如果你是在版本低于 5.7.7 的 MySQL release 或者版本低于 10.2.2 的 MariaDB release 上创建索引,那就需要你手动配置迁移生成的默认字符串长度。 即在 AppServiceProvider 中调用 Schema::defaultStringLength 方法来配置它 :
柳公子
2018/09/17
1.4K0
CDH迁移 | CDH/HDP迁移之路
Cloudera(Cloudera 和Hortonworks 合并后)所有产品不再提供社区版,用户无法获取新的功能。
云上计算
2022/04/04
2.5K0
CDH迁移 | CDH/HDP迁移之路
迁移到云端的实际方法:提升、转移和重构
如今,云计算的宣传和炒作周期似乎已经结束。云计算技术也成为各行业的颠覆者,并已成为公认的标准——主导交付模式。因此,IT行业中的大多数人现在都了解在云中运行业务的好处。获得安全性、可扩展性、灵活性、弹性、成本控制等都是企业将业务迁移到云端的优先事项。
CloudBest
2019/09/25
5490
迁移到云端的实际方法:提升、转移和重构
NLP中的范式迁移
随着预训练模型的发展,NLP领域从各自任务的单打独斗,逐渐转变为几个主流范式的中原逐鹿,近期风头正盛的prompt learning更是隐隐有一统江湖之势。
NewBeeNLP
2021/10/20
1.2K0
Elasticsearch索引迁移的四种方式
本文主要讲解Elasticsearch下实现索引迁移的几种方式。 #0、引言 将ES中的索引拷贝到其他ES中,或者将ES整体迁移,研究发现有两个开源的工具:elaticserch-dump和 Elasticsearch-Exporter。 除此之外,logstash在索引同步、迁移方面的作用也很大。 两工具及logstash实现迁移的介绍、安装、使用、验证效果等展示如下:
全栈程序员站长
2022/09/02
2.1K0
数据迁移(2) - 如何快速迁移
在上一篇中我们介绍了数据迁移的套路,但是没有介绍具体的方案,这篇着重介绍下具体的数据迁移方案
方丈的寺院
2020/05/20
3.3K0
账号迁移-迁移确认成功
您诸位好啊,我是无尘。 最近几天在开通留言的功能,因为微信设定的在18年之后注册的个人号,没有留言功能,要想开通,只能通过账号迁移来实现(具体实现细节,感兴趣的可以找我私聊)。截止到昨天,账号算是迁移完毕。
微客鸟窝
2021/08/18
1.1K0
账号迁移-迁移确认成功
Elasticsearch 实战案例(索引切分、模板、别名、数据迁移)
基于ELK搭建的日志平台,前期匆忙建设过程中一些参数和设计未做过多的考虑,上线后就需要不断根据实际情况做调整,而一些调整限于ELK的一些特性,一旦操作不当就会出现丢数据、数据写入异常、数据查不到等情况。
高广超
2019/02/25
2.7K0
Elasticsearch 实战案例(索引切分、模板、别名、数据迁移)
Oracle冷备迁移脚本(文件系统) 关注进程信息掌控迁移进度
注:需要根据你实际环境配置对应的环境变量。 执行上述脚本生成配置文件/tmp/db.config
Alfred Zhao
2019/05/24
4330
点击加载更多

相似问题

安卓系统中的YouTube视频

12

在安卓系统的WebView中只显示Youtube频道视频的缩略图

15

在安卓系统中显示YouTube JSON数据

10

安卓系统中的youtube-dl

17

在安卓系统中Youtube网站的WebView问题?

37
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档