我目前正在构建一个运行 node.js 0.4.12 和 express 框架的小型音乐测验
目前我的 express 设置非常非常基本,只提供基本 url
app.get('/', function(req, res){
res.render('index.jade');
});
我已经实现了一个小导航,它使用一个非常大的 div 和一个隐藏的溢出和一个内部 div,其内容根据您单击的导航标题调整其左值。
我还有一个新闻版 block ,只要你点击它就会运行一个 mongodb 查询(内容通过 socket.io 传送)
当然,这根本不是搜索引擎友好的,我的新闻永远不会被发现,并且不需要每次都运行查询来获取新闻。 所以我需要一些存储新闻信息的方法,并且只在发布新评论或添加新新闻时更新它...
创建工作链接也很繁琐,目前我使用 document.location.href.replace 通过 javascript 来完成...
还有一个问题是,如果我继续将我拥有的所有内容都放在一个页面上,我担心网站会变得太大并且加载时间太长......
那么,我如何才能保持当前页面的感觉(一个无所不在的播放器,除非您离开页面,否则永远不会停止),同时正确地服务于搜索引擎并保持较低的页面加载时间?
最佳答案
让我知道我是否在正确的轨道上,因为我不完全理解你的问题,但这是我将如何完成你想要做的事情:
如果您正在寻找 SEO 好处,有两种方法可以做到这一点。
要么在单个页面上从服务器加载所有内容,然后在加载后使用 CSS 和 Javascript 操作内容...
或
以传统方式设置您的页面(每个导航选项卡链接到一个新的完整页面),然后根据需要使用 Javascript 通过 AJAX 加载您的内容。
在这两种情况下,Google 都可以抓取您的页面/网站结构并获得它需要的一切,您仍然可以使用 JS 为您的用户分层交互。无论您最终做什么,SEO 规则通常是“像我不需要 JS 来加载您的所有内容一样对待它”。
听起来您已经涵盖了第一种情况,但我不会在您的链接中使用 JS,而是使用 id 使它们成为标准的 HTML anchor 链接。
如果您对第二种情况感兴趣,我建议您这样做:
首先,将您的导航视为不需要 javascript 即可正常工作。这意味着每个导航元素都链接到一个单独的页面(每个页面都需要一个单独的 express 路由)。
如果您使用 Jade 来呈现您的模板,我会使用它的继承功能来管理您的标记。基本上,您会将所有 html 放入 layout.jade,并在用于页面内容的大 div 中,创建一个 block里面的默认内容。然后,您为每个导航元素设置的路由将调用扩展 index.jade 的不同模板,并将特定于页面的内容写入您创建的 block。
这是一个例子:
app.get('/', function(req, res){
res.render('index.jade');
});
app.get('/section1', function(req, res){
res.render('section1.jade');
});
app.get('/section2', function(req, res){
res.render('section2.jade');
});
这确保每次您访问 http://yoursite.com/section1 时,都会呈现整个页面(页眉、页脚等),但您不必复制每个模板中的页眉和页脚代码。它只存在于 index.jade 中,由其他特定于部分的模板进行扩展。
在设置新闻提要时,除非它向客户端推送实时新闻更新,否则我会放弃 socket.io 设置,而是在页面加载时从数据库加载它。抓取页面加载时从数据库返回的任何内容,并通过局部变量将其传递给您的 jade 模板。例如:
app.get('/news', function(req, res){
res.render('news', {
newsArticles: newsArticles
});
});
最后,当您像标准网站一样工作时(传统的 http 页面加载与 javascript 加载),然后在您的 javascript 上分层以将页面转换为通过 AJAX 加载内容的页面。我使用 jQuery 来执行此操作并且效果很好。编写一些 jQuery 代码,将点击事件附加到您的每个导航项。此点击事件将从您链接中的 href 中获取 URL,然后将其传递给 jQuery“加载”方法,然后该方法会将您主要内容区域中的内容替换为页面中的标记刚刚通过 ajax 加载。
关于mongodb - 动态 node.js 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8123412/
我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption
有没有办法在Ruby中动态创建数组?例如,假设我想遍历用户输入的书籍数组:books=gets.chomp用户输入:"TheGreatGatsby,CrimeandPunishment,Dracula,Fahrenheit451,PrideandPrejudice,SenseandSensibility,Slaughterhouse-Five,TheAdventuresofHuckleberryFinn"我把它变成一个数组:books_array=books.split(",")现在,对于用户输入的每一本书,我想用Ruby创建一个数组。伪代码来做到这一点:x=0books_array.
我想在IRB中浏览文件系统并让提示更改以反射(reflect)当前工作目录,但我不知道如何在每个命令后进行提示更新。最终,我想在日常工作中更多地使用IRB,让bash溜走。我在我的.irbrc中试过这个:require'fileutils'includeFileUtilsIRB.conf[:PROMPT][:CUSTOM]={:PROMPT_N=>"\e[1m:\e[m",:PROMPT_I=>"\e[1m#{pwd}>\e[m",:PROMPT_S=>"FOO",:PROMPT_C=>"\e[1m#{pwd}>\e[m",:RETURN=>""}IRB.conf[:PROMPT_MO
我正在尝试提取方括号内的内容。到目前为止,我一直在使用它,它有效,但我想知道我是否可以直接在正则表达式中使用某些东西,而不是使用这个删除功能。a="Thisissuchagreatday[coolawesome]"a[/\[.*?\]/].delete('[]')#=>"coolawesome" 最佳答案 差不多。a="Thisissuchagreatday[coolawesome]"a[/\[(.*?)\]/,1]#=>"coolawesome"a[/(?"coolawesome"第一个依赖于提取组而不是完全匹配;第二个利用前瞻和
首先,我使用的是rails3.1.3和来自master的carrierwavegithub仓库的分支。我使用after_init钩子(Hook)来确定基于属性的字段页面模型实例并为这些字段定义属性访问器将值存储在序列化哈希中(希望它清楚我是什么谈论)。这是我正在做的事情的精简版:classPage省略mount_uploader命令让我可以访问我想要的属性。但是当我安装uploader时出现错误消息说“nil类的未定义新方法”我在源代码中读到有方法read_uploader和扩展模块中的write_uploader。我如何必须覆盖这些来制作mount_uploader命令使用我的“虚拟
使用Ruby1.8.6/Rails2.3.2我注意到在我的任何ActiveRecord模型类上调用的任何方法都返回nil而不是NoMethodError。除了烦人之外,这还破坏了动态查找器(find_by_name、find_by_id等),因为即使存在记录,它们也总是返回nil。不从ActiveRecord::Base派生的标准类不受影响。有没有办法追踪在ActiveRecord::Base之前拦截method_missing的是什么?更新:切换到1.8.7后,我发现(感谢@MichaelKohl)will_paginate插件首先处理method_missing。但是will_pa
我正在尝试动态构建一个多维数组。我想要的基本上是这样的(为简单起见写出来):b=0test=[[]]test[b]这给了我错误:NoMethodError:undefinedmethod`test=[[],[],[]]而且它工作正常,但在我的实际使用中,我不会事先知道需要多少个数组。有一个更好的方法吗?谢谢 最佳答案 不需要像您正在使用的索引变量。只需将每个数组附加到您的test数组:irb>test=[]=>[]irb>test[["a","b","c"]]irb>test[["a","b","c"],["d","e","f"]]