-a.com b.com
-a 浏览器不会再请求a了
-会直接跳到 b 了
-a.com b.com
-a 还是会请求a
-a 告诉浏览器往 b 跳转
-fs 文件操作的fs
-http 服务的http
-url 路径操作模板
-path 路径处理模板
-os 操作系统信息
- art-template
-必须通过npm 下载使用的
-文件路径
+模块作用域
+使用require 方法来加载模块
+使用exports 接口对象来导出模块中的成员
+++
对与希望可以被其他模块访问的信息,我们就需要把这些公开的成员都挂载到exports接口对象中就可以了。
导出多个成员(必须在对象中)
exports.a = 123 exports.b = 'hello' exports.c = function(){ console.log('ccc') } exports.d = { foo: 'bar' } 导出单个成员(拿到的就是:函数,字符串) module.exports = 'hello' module.exports = function(){ } //后面的会覆盖前面的 也可以导出多个成员 module.export = { add:function(){ return x+y }, str:'hello' }一个项目中有且只有 node_modules 而且是存放在项目的根目录中的
这样的话项目中所哟子目录中的代码都可以加载到第三方包
不会出现有多个node_modules
详细见《深入浅出NodeJs》模块部分
优先从缓存加载 (node底层做的) 不会重复加载 拿到其中的接口对象避免重复加载,提高模块加载的效率 核心模块路径形式的文件模块第三方模块判断模块标识建议每一个项目都有一个package.json
npm initnpm init -y //跳过向导,快速生成npm install --save jquery //保存依赖信息npm install //会下载package.json 文件下的所有依赖package.json和package-lock.json
npm5 以前是不会有package-lock.json这个文件的npm5以后才会有npm5 以后的安装包不需要 --save的参数,它会自动保存依赖项package-lock.json这个文件会保存node_modules中的所有包的依赖当node_modules删除重新安装的时候,安装的速度会更快lock是锁定版本的 如果这个项目依赖了1.11.1如果你重新安装install 其实是会安装最新的版本它会锁定我们当时使用的版本,不让他自动升级npm uninstall --save jquery
删除时,依赖也会删除npm uninstall --help
获取帮助配置淘宝镜像r
npm config set registry https://registry.npm.taobao.org #查看配置信息 npm config list模块加载中,相对路径 ./ 不能省略
文件加载时,相对路径 ./ 可以省略
fs.readFile() 和ajax一样,都是异步操作,最后执行
可以使用第三方的命令行工具,nodemon解决频繁修改代码重启服务器的问题
nodemon 是一个基于NodeJs开发的一个第三方命令行工具,使用时需要全局安装
npm install -g nodemon #安装之后使用 #nodemon app.jsget:
//当以GET的方式请求的时候,执行对应的处理函数 app.get('/', function(req,res){ res.send('hello'); });post:
//当以POST的方式请求的时候,执行对应的处理函数 app.post('/', function(req,res){ res.send('hello post'); });安装:
express-art-template 依赖了art-template
npm install --save art-template npm install --save express-art-template配置:
express 为 response 相应对象提供了一个方法 : render
render 方法默认是不可以使用的, 但是如果配置了模板引擎就可以使用了
res.render(‘html模板名称’,{模板数据})
第一个参数不能路径,默认会去项目中的views目录中查找模板文件
也就是说express有一个约定,开发人员把所有的视图文件都放在 views 目录中了
app.engine('html',require('express-art-template')); app.get('/',function(req,res){ res.render('index.html'); }) app.get('/admin', function(req,res){ res.render('admin/index.html',{ }); })如果希望修改默认的views视图渲染存储目录,可以通过
app.set('views',目录路径);在express中没又内置获取表单post请求体的API,这里我们需要使用一个第三方包,body-parser
在get中是express中内置了一个方法获取请求体,res.query
post: res.body
安装:
npm install body-parser --save配置示例:
var express = require('express') var bodyParser = require('body-parser') var app = express() //加入这个配置之后,多一个 req.body 拿到请求体的对象 // parse application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ extended: false })) // parse application/json app.use(bodyParser.json()) app.use(function (req, res) { res.setHeader('Content-Type', 'text/plain') res.write('you posted:\n') res.end(JSON.stringify(req.body, null, 2)) })异步方法:
setTimeoutreadFilewriteFilereddirajax用回调函数调用异步的结果
path.basename
获取一个路径的文件名path.dirname
获取一个路径中的目录部分path.extname
获取一路径中的扩展名部分path.join
路径的拼接path.isAbsolute
判断一个路径是否是绝对路径path.parse()
把一个路径转为一个对象 path.parse('e:/a/b/c/d.html')__dirname 可以用来获取当前文件模块所属目录的绝对路径
__filename 可以用来获取当前文件的绝对路径
两者都是动态获取的
在文件操作中,使用相对路径是不可靠的,因为在Node中文件操作的路径被设计为相对于执行Node命令所处的路径 (这不是bug 这样设计是有使用场景的)。在require()中不会影响,可使用相对路径。
为了解决这个问题,很简单,只需要将相对路径换成绝对路径即可
可以使用__dirname或者__filename帮我们解决这个问题
推荐使用path.join()来帮我们解决拼接路径,避免我们手动拼接出现问题
