node js 基础
node.js
node.js
- Node.js不是一门语言
- Node.js不是库、不是框架
- Node.js是一个JavaScript运行时的环境
- Node.js可以解析和执行JavaScript代码
- 浏览器中的JavaScript
- EcmaScript
- 基本的语法
- if
- var
- function
- Object
- Array
- BOM
- DOM
- EcmaScript
- Node.js中的JavaScript
- 没有BOM、DOM
- EcmaScript
- 在Node这个JavaScript执行环境中为JavaScript提供了一些服务器级别的API
- 例如文件读写
- 网络服务构建
读取文件
1 | //浏览器中的JavaScript是没有文件操作的能力 |
写入文件
1 | var fs = require('fs') |
简单http服务
1 | //构建web服务器 |
Node中的JavaScript
- EcmaScript
- 核心模块
- 第三方模块
- 用户自定义模块
核心模块
Node为了JavaScript提供了很多服务器级别的API,这些API绝大多数都被包装到了一个具体的核心模块。例如fs
核心模块,http服务构建模块require
,path
路径
1 | var fs = require('fs') |
模块系统
1 | //require 方法有两个作用 |
ip地址和端口号的概念
path路径操作模块
1 | path.basename('c:/a/b/c/index.js') |
- path.dirname
- 获取一个路径中的目录部分
- pathn.extname
- 获取一个路径中的扩展名部分
- path.parse
- 把一个路径转换为一个对象
- root 根路径
- dir目录
- base 包涵后缀名的文件名
- ext后缀名
- name 不包含后缀名的文件名
- 把一个路径转换为一个对象
- path.join
- 当你需要进行路径拼接的时候,使用他
- path.isAbsolute
- 判断一个路径的是否为绝对路径
node中的其他成员
在每个模块中,除了require
、exports
等模块相关API职位,还有两个特殊的成员,
_dirname
动态获取可以用来获取当前文件模块所属目录的绝对路径_filename
动态获取可以用来获取当前文件的绝对路径
1 | //./a.txt 相对于当前文件路径 |
在文件操作中,使用相对路径是不可靠的,不是bug
相对路径变为绝对路径用path.join()
拼接
模块中的路径标识和文件操作相对于当前文件模块,不受执行影响
服务器读取资源
1 | //加载fs模块读取文件,写入文件 |
不同资源对应不用的Content-Type需要配置
代码风格
注意;
无论采用是否有这种风格,都在前面加;
有些人也使用!~等符号
es6中支持一种字符串包裹方式,叫做:模板字符串
var foo = 'bar'
支持换行与html5中<pre>
相同
服务端渲染和客户端渲染
服务端渲染就服务就行渲染
- 响应的是结果
客户端渲染
服务端与客户端区别
- 客户端不利于SEO搜索引擎优化
- 服务端渲染可以被爬虫抓取到的,客户端异步渲染
web服务器开发
1 | var http = require('http') |
apache目录渲染
1 | var http = require('http') |
html渲染页面
1 | 。。。。。。。 |
处理表单get请求
1 | else if (pathname.indexOf('/public/') === 0) { |
require加载规则(模块作用域)
加载node_modules
- 先找到当前目录所在的 node_modules目录
- node_modules/加载文件名的/package.json
- 文件中main 对应的js文件
- 如果没有package.json默认加载index.js
CommonJS模块规范
模块系统
- 模块作用域
- 使用 require 方法加载模块
- 使用 exports 接口来导出模块中的成员
require 加载
两个作用:
- 执行被加载的代码
- 得到被加载模块中的
exports
导出接口对象
exports导出
对于可以被其他模块访问的成员,我们就需要公开都挂载到exports
接口中
导出多个成员:
1 | exports.a = 123 |
导出单个成员
1 | module.exports = 'hello' |
以后情况会覆盖:
1 |
package.json
我们建议一般每个项目都要有一个package.json文件。这个文件可以同过nmp init
创建
npm
npm官网
npmjs.com
npm命令行工具
npm 的第二层含义就是命令行工具,只要安装node就安装了npm
升级npm
1 | npm install --global npm |
常用命令
npm init
- npm init -y快速生成
- 生成详细的package.json包括其他配置信息
npm install
npm install 包名
- 只下载
npm install –save 包名
下载并且保存依赖项(package.json文件中的dependencies选项)
npm i -S包名
在npm5.0.0以上均支持自动保存配置信息
加–save是为了区分是否必须的依赖
npm install –production
1
2
3
4"scripts":{
"start":"node main.js",
"dev":""
},直接执行npm start或者 npm run start 或者npm run
其他命令
npm uninstall 包名
- 只删除,如果有依赖项会依然保存
npm uninstall –save 包名
- 删除的同时也会把依赖信息也去除
- npm un -S包名
npm help
- 查看使用帮助
npm 命令 –help
- 查看指定命令的使用帮助
- 例如我忘记了uninstall命令的简写了,这个我可以输入这个
npm被墙问题
安装淘宝的cnpm:
1 | npm install --global cnpm |
接下来你安装的会替换npm为cnpm
1 | cnpm install jquery |
mkdir cnpm-demo创建羡慕
rmdir cnpm-demo删除项目
1 | npm install jquery --registry=https://淘宝地址 |
只要写了下面的命令每次都是通过淘宝的服务器下载
1 | npm config set registry https://registry.npm.taobao.org |
Express
起步
1 | npm init --yse |
安装nodemon自动重启
1 | npm install --global nodemon |
基本路由
get
1 | // |
post
1 | // |
在Express中配置art-tempalte
模板
1 | npm install --save art-tempalte |
配置
1 | app.engine('art',require('express-art-template')) |
如果更改渲染路径
1 | //不能写错views |
在express获取表单post请求数据
body-parser
1 | npm isntall --save body-parser |
配置
1 |
在输入JSON数据中配置db.json时注意
1 | { |
路由设计
请求方法 | 请求路径 | get参数 | post参数 | 备注 |
---|---|---|---|---|
GET | /studens | 渲染首页 | ||
GET | /students/new | 渲染添加学生页面 | ||
POST | /studens/new | name、age、gender、hobbies | 处理添加学生页面 | |
GET | /students/edit | id | 渲染编辑页面 | |
POST | /studens/edit | id、name、age、gender、hobbies | 处理编辑请求 | |
GET | /students/delete | id | 处理删除请求 |
MongoDB
关系型数据库和非关系型数据库
表就是关系
所有的关系型数据库都需要
sql
语句操作所有的关系型数据库都需要设计表结构
而且数据表还支持约束
- 唯一的
- 主键
- 默认值
- 非空
非关系型数据库非常灵活
有的非关系型数据库就是key-value对儿
在MongoDB是长的最像关系型数据库的非关系型数据库
- 数据库->数据库
- 数据表->集合(数组)
- 表记录->(文档对象)
MongoDB不需要设计表结构
也就是你可以任意的往里面存数据
第三方包:
mongoose
基于MongoDB官方的mongodb
包再一次做了封装
express—session
安装
1 | npm install express-session |
配置
1 | // 在 Express 这个框架中,默认不支持 Session 和 Cookie |
使用:
1 | //添加 Session 数据 |
提示:默认Session 数据时内存存储的,服务器一旦重启就会丢失,真正的生产环境会把 Session 数据持久化。
NVM管理node版本
下载地址
https://github.com/coreybutler/nvm-windows/releases
查看版本
1 | nvm -v |
查看node版本
1 | nvm ls |