Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

「4」Byrs-News 建站笔记(一) #5

Open
BuptStEve opened this issue Mar 17, 2016 · 0 comments
Open

「4」Byrs-News 建站笔记(一) #5

BuptStEve opened this issue Mar 17, 2016 · 0 comments

Comments

@BuptStEve
Copy link
Owner

零、前言

差不多结束了在移动研究院快一年的实习,加上马上到来的寒假,想着闲着也是闲着不然做个网站练练手吧╮(╯▽╰)╭

于是在寒假里就捣鼓了这么个网站 Byrs-News | 开源地址,主要内容是通过爬虫 Byr-Crawler 对于北邮人论坛帖子进行定时爬取,在收集整理之后希望大家能够更加“优雅地”浏览论坛~= ̄ω ̄=~。

一、技术栈

  • 网站采用了 Meteor.js 全栈式开发
  • 数据库选择了 MongoDB 进行存储
  • 内容获取来自自己编写的 Node.js 爬虫

那么首先问题来了...

1.1. Meteor 是个什么玩意儿?

Meteor 是一个只使用 JavaScript 就可以开发 Web 和移动端应用的全栈框架。主要特点有:

  • 一种语言(One Language):JavaScript(就可以搞定服务器、浏览器、移动设备)。
  • 传递数据(Data on the wire):服务器和客户端之间传递的是数据(而不是 html),由客户端进行数据的渲染。
  • 无处不在的数据库(Database everywhere):从客户机或服务器上使用相同、透明的 API 访问数据库。(在浏览器端实现了 Minimongo)
  • 延迟补偿(Latency Compensation):使用预读和模式模拟技术,使之看起来与数据库的连接是零延迟的。
  • 全栈响应式(Full Stack Reactivity):代码所依赖的数据发生变化时,结果 会自动重新计算。(并不是指响应式)
  • 拥抱生态(Embrace the Ecosystem):开源、与现有工具和框架整合,而不是取代。
  • 简单等于生产力(Simplicity Equals Productivity):让一件事看起来简单的最佳方式就是「真正」让它变得简单。

我的感受是使用 Meteor.js 可以在只用一种语言(JavaScript)的情况下,「超快速」地开发出一个功能完善的现代网站。

还有疑问?

Take it easy.且看我后文慢慢道来...

1.2. 为什么选择 MongoDB?

  • 首先当然是因为它是 Meteor 的默认数据库呀╮(╯▽╰)╭
  • 其次作为一个 NoSQL 数据库比传统关系型数据库更加灵活,更加适用于互联网应用场景
  • 我可以在爬虫运行过程中可以更加方便地修改文档结构
  • ...

1.3. 为什么是 Node.js 爬虫?

因为正好最近在学习 Node.js,还有保持项目只有一种语言。

二、项目规范

2.1. 命名规范

  • 文件夹和文件采用小写字母,用下划线 _ 连接。
  • JavaScript 文件中的内容采用驼峰命名法(因为毕竟它自己就是用的驼峰╮(╯▽╰)╭)。
  • CSS 文件中的内容采用连字符 - 连接(因为本来 CSS 语法就是用连字符,如 font-family 等)。

2.2. 文件夹规范

由于是一个全栈式框架(代码写一块儿╮(╯▽╰)╭),所以文件夹的名字十分地重要。因为会影响 Meteor 对其加载的顺序(见下文)。

一般来说有在顶级项目目录下有以下规范的命名:

  • client/ : 放置所有的客户端代码,Meteor 也不会将其在服务端加载。
  • server/ : 放置所有的服务端代码,Meteor 也不会将其在客户端加载。
  • public/ : 放置静态资源,例如 favicon.ico, robots.txt 等。
  • node_modules/ : Node.js 模块代码。(比如 cz-conventional-changelog)
  • tests/ : 本地测试代码。
  • private/ : 只能被服务器端代码获取,可以通过 Assets API 读取。(不常用)
  • client/compatibility/ : 只能被服务器端代码获取,可以通过 Assets API 读取。(不常用)
  • lib/ : 放置服务端和客户端共用的代码,比如 config.js、数据库文件夹 collections/。

加载顺序(了解即可)

  • 应用根目录内 lib 文件夹下的文件首先加载。
  • 符合 main.* 这个格式的文件最后加载。
  • 子目录中的文件在母目录中的文件之前加载,即最深层子目录中的文件首先加载(在 lib 之后),根目录的文件最后加载(在 main.* 之前)。
  • 同目录下的文件,按文件名的字母顺序来加载。

三、重要参考资料

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant