为期一个半月的学习成果,记录的一些笔记
node.js是一个js运行环境
node.js可以解释和执行js代码
浏览器中的JavaScript分为3部分:
1)EcmaScript(基本的语法,如if、var、function等)
2)BOM
3)DOM
node.js中的JavaScript:
1)EcmaScript
2)为JavaScript提供了一些服务器级别的操作API(文件读写、网络通信、http服务器等)
关键字:事件驱动,NIO,轻量高效
拥有包的生态系统,npm,类似于java后台中使用的maven
var fs = require('fs');
fs.readFile('文件路径',function(error,data){
//error是错误对象,data是读取到的文件的内容
});
fs.writeFile('要写文件到哪个路径','要写的内容',function(error){
//error是错误对象
});
node.js简单的http服务
var http = require('http');
var server = http.createServer();
server.on('request',funciton(request,response){
});
serve.listen(端口号,function(){
//绑定端口号之后的回调
})
现有a.js文件与b.js文件在同一目录下,需要在a中引用b,则在a中写:
var b = require('./b.js');
注意一定要带上路径定位符号./
不然会会将b.js识别成系统模块而报错;末尾的.js可以省略
需要在a中使用b中的数据,需要将b中的数据使用一个名为exports的参数进行挂载:
在b中:exports.param='hello'
;
在a中:使用var b = require('./b.js');
引入b.js
使用b.param
则可以得到hello
同理还可以在b中挂载方法到exports上:
exports.add = function(a,b){ return a+b; }
为了解决响应中文乱码的问题,课程中简单介绍了一下content-type
输出之前设置字符集编码utf-8
res.setHeader('Content-type','text/plain;charset=utf-8');
关于content-type的详细类型可参考http://www.runoob.com/http/http-content-type.html hello node hello node hello node
示例:使用'text/plain'
的类型,res.end('
,会在页面上输出
使用'text/html'
的类型,res.end('
,会在页面上输出hello node
(不设置content-type
时,浏览器按照text/html对输出进行解析
js代码中的分号一般都可以省略,除了以下情况:
当一行代码是
以[开头的、
以(开头的、
以`开头的
使用省略分号的书写风格时,建议在上述三种情况下,代码开头加一个分号,示例:
;['苹果','橘子','香蕉'].forEach(function(item){
console.log(item)})<br>
实现将一个服务端文件夹中的所有文件的文件名,以表格的形式展示在页面上
由一个node.js文件和一个html文件实现,两个文件放在同一文件夹下,html页面放一个占位符号,node读取html中的页面字符串、文件夹中的文件名,使用文件名数组拼接成html代码替换占位符,输出合成处理后的页面:
node.js文件
var fs = require('fs')
var http = require('http')
var server = http.createServer();
server.on('request',function(req,res){
//文件夹路径
var basePath = 'D:/workspace/nodetest'
var files = []
var mainHtml = ''
var contentStr = ''
fs.readdir(basePath,function(err,data){
if(err){
console.log('文件夹不存在')
}else{
files = data
files.forEach(function(item){
//循环拼接表格中的html代码
contentStr += ''+item+' '
})
fs.readFile('./demo.html',function(err,data){
mainHtml = data.toString()
res.setHeader('Content-Type','text/html;charset=utf-8')
mainHtml = mainHtml.replace('{
{}}',contentStr)
res.end(mainHtml)
})
}
})
})
server.listen('3000',function(){
console.log('服务器在3000端口启动了')
})
用来做页面模板的demo.html文件
<html>
<head>
<title>Title of the documenttitle>
head>
<body>
<h1>Demoh1>
<table>{
{}}table>
body>
html>
var res = '123
456
789
'
console.log(res)
结果输出123456789
var res = `123
456
789`
console.log(res)
结果输出`123
456
789`
另,``中可以直接渲染模板,如:
var content = ''
;['苹果','橘子','香蕉'].forEach(function(item){
content += `
${
item}
`
})
console.log(content)
结果为:
苹果
橘子
香蕉
<html>
<head>
<title>Title of the documenttitle>
head>
<body>
<script src="node_modules/art-template/lib/template-web.js">script>
<script type="text/template" id="tp1">
hello {
{
name}}
script>
<script>
var para = template('tp1',{
name:'Jack'
})
console.log(para)
script>
body>
html>
实例:
var template = require('art-template')
var ret = template.render('hello{
{name}}',{
name:'Jack Ma'
})
var ret1 = template.render('hello{
{each files}}文件有:{
{$value}}{
{/each}}',{
files:['Jack Ma','Chen','Wang']
})
console.log(ret) //helloJack Ma
console.log(ret1) //hello文件有:Jack Ma文件有:Chen文件有:Wang
服务端渲染(同步,在后台使用模板引擎):可以被爬虫抓取到,可以进行SEO
客户端渲染(异步):难以被爬虫抓取到;不利于SEO搜索引擎优化
如:京东的商品列表,为了SEO采用的服务端渲染
京东的评论列表为了用户体验,而不需要SEO,采用的客户端渲染
html页面引入静态资源,如:
`