Nodejs之路(二)—— Nodejs再入门
一、在Node中使用模板引擎
js代码:
// art-template不仅可以在浏览器使用,也可以在node中使用 // 1.安装 npm install art-temlate模板引擎
// 2.在需要使用的文件模块中加载art-template
// 只需要使用require方法加载就可以了:require('art-template')
// 参数中的art-template就是你下载的包的名字
// 也就是说你install 的名字是什么,则你require中的就是什么
// 3.查文档,使用模板引擎的API var template = require('art-template') var fs = require('fs') fs.readFile('./tpl.html',function(err,data){
if(err){
return console.log('读取内容失败了')
}
// 默认读取到的data是二进制数据
//而模板引擎的render方法需要接收的是字符串
//所以这里需要把data二进制数据转换为字符串,才能供模板引擎使用
var ret = template.render(data.toString(),{
name:'Jack',
age:18,
province:'北京市',
hobbies:[
'写代码',
'唱歌',
'打游戏'
],
title:'个人信息'
})
console.log(ret)
})
html代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{title}}</title>
</head>
<body>
<p>大家好,我叫:{{ name }}</p>
<p>我今年{{ age }}岁了</p>
<h1>我来自{{ province }}<h1>
<p>我喜欢:{{each hobbies}}{{ $value }}{{/each}}</p>
<script>
var foo = '{{title}}'
</script>
</body>
</html>
结果:渲染成功
二、Nodejs中url模块的使用
var url = require('url') // parse方法将路径解析为一个方便操作的对象,第二个参数为 true 表示直接将查询字符串转为一个对象(通过query属性来访问)
var obj = url.parse('/pinglun?name=火箭队&message=下赛季加油',true) console.log(obj) // 获取查询字符串对象
console.log(obj.query) // 单独获取不包含查询字符串的路径部分(该路径不包含 ? 之后的内容)
console.log(obj.pathname)
结果:
三、通过服务器让客户端重定向
代码:
var http = require('http') http.createServer(function(req,res){ var url = req.url
if(url === '/'){
res.setHeader('Content-Type','text/plain; charset=utf-8')
res.end('起始页')
}else if(url === '/next'){
res.setHeader('Content-Type','text/plain; charset=utf-8')
res.end('成功跳转')
console.log('成功跳转')
}else if(url === '/tiaozhuan'){
//如何通过服务器让客户端重定向?
// 1.状态码设置为 302 临时重定向(通过statusCode设置)
// 2.在响应头中通过 Location告诉客户端往哪儿重定向(通过setHeader设置)
// 如果客户端发现收到服务器的响应的状态码是 302 就会自动去响应头中找 Location,然后对改地址发起新的请求
// 所以你就能看到客户端自动跳转了 res.statusCode = 302
res.setHeader('Location', '/next')
console.log('跳转请求')
res.end() //注意: 一次请求对应一次响应,响应结束,这次请求也就结束了
// 301 永久重定向 浏览器会记住
// 302 临时重定向 浏览器不记忆 }
})
.listen(3000,function(){
console.log('Server is running')
})
结果:浏览器输入 http://127.0.0.1:3000/tiaozhuan 后会自动跳转到 http://127.0.0.1:3000/next
四、一些补充
1.服务端渲染和客户端渲染:
1.1 客户端渲染:
1.2服务端渲染:
1.3服务端渲染和客户端渲染的区别:
客户端渲染不利于SEO搜索引擎优化
服务端渲染是可以被爬虫抓取到的,客户端异步渲染是很难被爬虫抓取到的
你会发现真的网站既不纯异步也不是纯客户端渲染出来的,而是两者结合来做的
例如京东的商品列表就采用的是服务端渲染,目的是为了SEO搜索引擎优化。而它的商品列表评论为了用户体验,而且也不需要SEO优化,所以采用的是客户端渲染
Nodejs之路(二)—— Nodejs再入门的更多相关文章
- 基于Nodejs生态圈的TypeScript+React开发入门教程
基于Nodejs生态圈的TypeScript+React开发入门教程 概述 本教程旨在为基于Nodejs npm生态圈的前端程序开发提供入门讲解. Nodejs是什么 Nodejs是一个高性能Ja ...
- 在阿里云 ECS 搭建 nginx https nodejs 环境(二、https)
在阿里云 ECS 搭建 nginx https nodejs 环境(二) 这次主要内容是 如何在 ubuntu 的nginx 下配置 二级域名. 一. 域名解析 首先你需要去到你的 域名服务商那边 进 ...
- nodejs之路-[0]安装及简易配置
题外话: 之前写过ubuntu下编译nodejs- 传送门:Ubuntu15.04编译安装nodejsV0.12.3 只是如今基本在win下做开发了-. 就以这篇帖子为开头,作为我踏上nodejs之路 ...
- NodeJS笔记(二)- 修改模块默认保存路径
参考:nodejs prefix(全局)和cache(缓存)windows下设置 假设nodejs根目录为“D:\nodejs” 如下所示,新建“node_cache”文件夹用来存放全局缓存 该路径下 ...
- nodejs学习笔记一——nodejs安装
a.nodejs安装 nodejs的安装没有什么说的默认安装即可.安装包官网下载即可:nodejs官网 本人用的是window的安装包node-v4.2.6-x64.msi 安装完成后打开命令行查看使 ...
- webpack入坑之旅(二)loader入门
这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack 在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...
- SLAM+语音机器人DIY系列:(二)ROS入门——4.如何编写ROS的第一个程序hello_world
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...
- nodeJs学习过程之认识nodejs
nodeJs只是听说过,没见过,没玩过.从新手开始,我想慢慢掌握它. 一.首先,我想知道nodeJs是什么? 摘自百度百科: Node.js是一套用来编写高性能网络服务器的JavaScript工具包, ...
- Java开发学习(二十三)----SpringMVC入门案例、工作流程解析及设置bean加载控制
一.SpringMVC概述 SpringMVC是隶属于Spring框架的一部分,主要是用来进行Web开发,是对Servlet进行了封装.SpringMVC是处于Web层的框架,所以其主要的作用就是用来 ...
- 我的VSTO之路(二):VSTO程序基本知识
原文:我的VSTO之路(二):VSTO程序基本知识 开始之前,首先我介绍一下我的开发环境:VS2010 + Office 2010,是基于.Net framework 4.0和VSTO 4.0.以下的 ...
随机推荐
- ARM GNU 专有符号
1. @ 表示注释从当前位置到行尾的字符. 2. # 注释掉一整行. 3. ; 新行分隔符.
- VS环境下,DEV插件的ComboBoxEdit控件最简单的数据源绑定和获取方法
使用 ComboBoxEdit 控件绑定key/value值: 因为 ComboBoxEdit 没有 DataSource 属性,所以不能直接绑定数据源,只能一项一项的添加. 首先创建一个类ListI ...
- Codeforces Round #567 (Div. 2)自闭记
嘿嘿嘿,第一篇文章,感觉代码可以缩起来简直不要太爽 打个div2发挥都这么差... 平均一题fail一次,还调不出错,自闭了 又一次跳A开B,又一次B傻逼错误调不出来 罚时上天,E还傻逼了..本来这场 ...
- HTML加载顺序
一.js执行顺序 //1. 外部引入的js文件,会异步下载并且执行(<script>块中的语句),根据引入的位置会在不同时刻执行 //2.$().ready(function() {}) ...
- range和arange
a = np.arange(12) print(a, type(a)) b = range(10) print(b, type(b)) li = list(b) print(li) 拓展: 两个参数: ...
- Android开发 LiveData与MutableLiveData详解
前言 LiveData与ViewMode是经常搭配在一起使用的,但是为了不太混乱,我还是拆分开来说明,此篇博客只讲解 LiveData 与 MutableLiveData的概念与使用方式(但是会涉及到 ...
- 关于 第三方接口支付的时候 采用post提交的方式,有两种 一种是通过 curl来进行,一种是通过js当页面加载完后跳转
这是第一种.通过javascript页面加载完后,对表单采用 post方式提交给 第三方接口----- echo <<<_END<!DOCTYPE html PUBLIC &q ...
- python: 函数递归与尾递归
如果一个函数在内部调用自己,那么这个函数就是递归函数. 例如一个阶乘函数:fact(n)=n! ,其实可以写成 fact(n)=n x fact(n-1). fact(n) 以递归的方式可以表示为: ...
- LOJ#6437. 「PKUSC2018」PKUSC
题面 题意转化为: 判断每个点所在的圆有多长的弧度角位于多边形内部. 然后就很暴力了. 每个点P,直接找到多边形和这个圆的所有交点,按照距离P的角度排序. 找交点,直接联立二元二次方程组.... 需要 ...
- Mysql中“select ... for update”排他锁(转)
原帖地址 https://blog.csdn.net/claram/article/details/54023216 Mysql InnoDB 排他锁 用法: select … for update; ...