Web2.0 TA 问题记录
记录一下上学期在当Web2.0 TA的时候遇到过的小朋友们问过的问题,可能会成为以后我开发上遇到的问题。
1. 元素的背景默认是boader origin的,也就是说是从边框开始延伸的。
但如果对body设置margin和背景的话,会发现body的背景也会延伸到margin的部分。(这是误区,实际上并不是“延伸到margin的部分”)
body{background:#069; margin:100px; border:30px solid #093;}

原因:当html标签无背景样式时,它就没有被激活,body类似于根结点,则body的背景色就被浏览器“俘获了”。一旦对html标签设定了背景样式,则此时html标签就称为最顶级,其背景被浏览器获取,成为浏览器的背景。
html{background:#999;}
body{background:#069; margin:100px; border:30px solid #093;}

2. nodeJS读取css和js文件:通过后缀名进行判断
nodeJS读取文件——fs.readFile,由于是异步的,所以读取完毕之后的动作放入回调函数中。其响应动作有三个步骤:
- 写头:response.writeHead(200, {"Content-Type": "XXXX"}) ,200表示成功状态,不同的文件类型使用不同的Content-Type
- 写数据:response.write(data),data就是回调函数中的参数(存有文件数据)
- 结束响应:response.end()
var http = require("http");
var fs = require("fs");
var url = require("url");
// 建立服务器
http.createServer(function (request, response) {
// 获得请求的url
var pathname = url.parse(request.url).pathname;
// 获得请求文件的后缀名
var ext = pathname.match(/(\.[^.]+|)$/)[0];
switch(ext) {
case '.css':
case '.js':
fs.readFile("."+request.url, "utf-8", function (err, data) {
if (err) throw err;
response.writeHead(200, {
"Content-Type": {
".css": "text/css",
".js": "application/javascript",
}[ext]
}); // ext是哪个,就选择对应的那个Content-Type
response.write(data);
response.end();
});
break;
default:
fs.readFile("./index.html", "utf-8", function (err, data) {
if (err) throw err;
response.writeHead(200, {"Content-Type": "text/html"});
response.write(data);
response.end();
});
}
}).listen(8888);
console.log("server start...");
3. mouseleave事件和mouseout事件
当鼠标指针离开元素时,会发生mouseleave事件,该事件通常与mouseenter事件一起使用。
与mouseout事件有所不同,如果鼠标指针离开任何子元素,同样会触发mouseout事件。
4. app.use(或router.use)用于加载路由和加载各种中间件,中间件简单来说就是函数,在没有传入路径的情况下这个函数在任何get/post请求下都会执行。
var app = express();
var router = express.Router(); // 没有挂载路径的中间件,通过该路由的每个请求都会执行该中间件
router.use(function (req, res, next) {
console.log('Time:', Date.now());
next();
}); // 一个中间件栈,显示任何指向 /user/:id 的 HTTP 请求的信息
router.use('/user/:id', function(req, res, next) {
console.log('Request URL:', req.originalUrl);
next();
}, function (req, res, next) {
console.log('Request Type:', req.method);
next();
}); // 一个中间件栈,处理指向 /user/:id 的 GET 请求
router.get('/user/:id', function (req, res, next) {
// 如果 user id 为 0, 跳到下一个路由
if (req.params.id == 0) next('route');
// 负责将控制权交给栈中下一个中间件
else next();}, function (req, res, next) {
// 渲染常规页面
res.render('regular');
}); // 处理 /user/:id, 渲染一个特殊页面
router.get('/user/:id', function (req, res, next) {
console.log(req.params.id);
res.render('special');
}); // 将路由挂载至应用
app.use('/', router);
中间件又分为应用级中间件和路由级中间件(区别暂时未知,以后有空可填坑),简单来说用use的时候,无论是get还是post的请求都要执行,一般用于通用中间件。而页面渲染显然是只有get请求才需要用到,所以就不用use而用get(也就是说只有get请求或者只有post请求才会调用的中间件,就用get/post而不用use)
参考:使用Express中间件
5. mongo命令行简单使用
- mongo :进入mongo命令行
- show dbs :查看有哪些数据库
- use signin :使用 signin 数据库
- db.user.find({id: 1}) :查找user collection里id为1的字段
6. 前后端协同开发
一般来说,后台只提供数据,前端来渲染视图有以下好处:
- 如果页面局部刷新频繁,可以节省一点IO(不需要每次都fetch html结构而只是数据)
- 纯数据接口比输出html的接口具有更好的扩展性,比如可以直接给移动app端或是更多形式的客户端使用
基于angular的应用一般是使用以上的方式进行前后端协同开发
7. angular中的ng-view:angular的路由使用的是哪个template,就会把那个template填到ng-view中
8. 在express2中,res.download里面的路径需要填绝对路径,而且不能出现".."。另外__dirname能获得当前目录的绝对路径。所以下载的话需要把要下载的文件放在定义路由中间件的文件中(以Web.doc为例),并且 res.download(__dirname + "/Web.doc");
9. 使用express-session这个包,如果要实现关闭浏览器还保存登陆状态,要把它的maxAge设置了,官方原文:
By default cookie.maxAge is null, meaning no "expires" parameter is set so the cookie becomes a browser-session cookie. When the user closes the browser the cookie (and session) will be removed.
app.use(cookieParser());
app.use(session({
secret: 'keyboard',
resave: true,
cookie: {maxAge: 60000*100}
}));
10. 在chrome下使用连字符连接的单词会被分开,而在火狐下则不会。

Web2.0 TA 问题记录的更多相关文章
- Webx.0-Web2.0:Web2.0
ylbtech-Webx.0-Web2.0:Web2.0 Web2.0 是相对于Web1.0 的新的时代.指的是一个利用Web的平台,由用户主导而生成的内容互联网产品模式,为了区别传统由网站雇员主导生 ...
- 多个精美的导航样式web2.0源码
效果体验:http://keleyi.com/keleyi/phtml/divcss/6.htm 兼容多浏览器,例如IE,Chrome,火狐 等. 完整代码,保存到htm文件打开也可以查看效果: &l ...
- Web1.0、Web2.0、Web3.0的主要区别
Web1.0:以静态.单向阅读为主,网站内信息可以直接和其他网站信息进行交互,能通过第三方信息平台同时对多家网站信息进行整合使用. Web2.0:以分享为特征的实时网络,用户在互联网上拥有自己的数据, ...
- ccs6.0使用问题记录
ccs6.0使用问题记录 彭会锋 1 编译过程中提示warning " Description Resource Path Location Type #9-D nested commen ...
- web2.0、互联网+、IT时代与DT时代、工业4.0 引发的思考
最近忙着找实习,来学校一个星期还没到,就感觉已经经历了几个春秋. 第一个实习面试是个杭州互联网小公司,面WEB前端开发实习,怪我一个暑假两个月一点书都没碰,偏偏赶上G20到9/9才开学,没啥准备就一头 ...
- (转)Web2.0 大型互联网站点的架构
这种资料.向来可遇不可求啊 WikiPedia 技术架构学习分享 http://www.dbanotes.net/opensource/wikipedia_arch.html YouTube 的架构扩 ...
- web2.0最全的国外API应用集合
web2.0最全的国外API应用集合 原文地址:http://www.buguat.com/post/98.html 2.0时代,越来越多的API被大家广泛应用,如果你还不了解API是何物,请看这里的 ...
- web2.0的几个开源项目
web2.0的几个开源项目 Diggclone-开源digg类程序官方:http://www.talkingpixels.org/diggclone/index.php演示:同digg.com类似 ...
- 解决CentOS无法显示中文字体 | 系统运维 | Web2.0
解决CentOS无法显示中文字体 | 系统运维 | Web2.0 About Me 博客园 devops 前端 张家港水蜜桃 傍晚好! 2013年09月12日 17:56:08 ...
随机推荐
- 巨蟒python全栈开发-第4天 列表&元组&range
今日内容大纲 1. 什么是列表 定义: 能装对象的对象 在python中使用[]来描述列表, 内部元素用逗号隔开. 对数据类型没有要求 列表存在索引和切片. 和字符串是一样的. 2. 相关的增删改查操 ...
- 微信公众号 待发货-物流中-已收货 foreach break continue
w <?php $warr = array(1,2,3); $w_break = 0; foreach($warr AS $w){ if($w==2)break; $w_break += $w; ...
- Java 面向对象编程介绍
面向对象的概念 类与对象的关系 封装 面向对象 面向过程: 强调的是过程(动作) 面向对象: 强调的是对象(实体) 面向对象的特点 面向对象就是一种常见的思想,符合人们的思考习惯; 面向对象的出现,将 ...
- STL中使用reverse_iterator时,如何正确使用erase函数
假设有一个list容器,顺序存储了0-9一个10个整数.现在要使用reverse_iterator迭代器来查找值为8和5的元素,并且将这两个数删除.先来看以下的解决方法: #include <i ...
- mysql创建索引/删除索引操作
-- 1.ALTER 创建索引 -- table_name表名,column_list列名,index_name索引名 -- 创建index索引 ALTER TABLE table_name ADD ...
- Django的模型层(2)- 多表操作(上)
一.创建模型 例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一(on ...
- 004-安装CentOS7后需要的操作
1 安装EPEL源 EPEL即Extra Packages for Enterprise Linux,是基于Fedora的一个项目,为红帽系的操作系统提供额外的软件包,适用于RHEL.CentOS和S ...
- 对 tensorflow 中 tf.nn.embedding_lookup 函数的解释
http://stackoverflow.com/questions/34870614/what-does-tf-nn-embedding-lookup-function-do embedding_l ...
- 算法题 21 findNSum (好未来,LeetCode,牛客网)
一.三数之和:LeetCode 15 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. ...
- boost智能指针总结
智能指针是一种具备指针类似行为的对象,当不在需要它的时候自动删除其引用的c++对象.直接点说就是自动析构C++对象. boost提供了6种智能指针,如下所示: scoped_ptr <boost ...