Node.js相关学习记录
今天看node项目, 发现了里面使用了一些方法,不是很了解,查了下,在此记录一下:
1. 模版引擎
var app = express();
app.set('views', './views'); // 指定模板文件存放位置
app.set('view engine', 'hb') // 设置默认的模板引擎
注册指定扩展名的模板引擎 :
var app = express();
app.engine('jade', require('jade')._express);
2. 本地变量
express()的app对象提供了app.locals属性来存储本地变量, app.locals实际上是一个函数对象,这意味着可以有两种方式来设置变量。
app.locals.title = "hello express";
app.locals.version = 4.0;
app.locals({
title: "hello express",
version: 4.0
});
3. 路由:
router 一般我们常用的方式也就是get和post,两者在写法上没有什么区别,但是在action中如果取值的话,会有一些区别,因为get方式的请求我们知道是直接拼接在url后面的, 而post方式是放到请求体中的,所以获取的时候方法不同;
app.get('/index', function(req, res) {
res.render('index.hb');
});
app.post('/index', function(req, res) {
res.render('index.hb');
});
4. 连接路径
path.join([path1][,path2][,…]), 可以连接任意多个路径字符串。要连接的多个路径可做为参数传入;**
console.log(module);
module{
id: 'xxx',
exports: {},
parent:
module {
id: 'xxx',
exports: {},
parent:
module {
id: '.',
exports: {},
parent: null,
filename: '/bin/www',
loaded: false,
children: [array],
paths: [array]
},
filename: 'xxx',
loaded: false,
children: [ [object], [object], [object], [object], [object], [circular] ],
paths: []
},
filename: 'xxxx',
loaded: false,
children: [],
}
console.log(exports);
{}
module.exports = exports = {};
当每个js文件在执行或被require的时候,nodejs其实创建了一个新的实例var module = new module(),这个实例名叫module。这也就是为什么你并没有定义module这个变量,却能console.log出来而不会报错的原因。
我们通常会这样用,用module.exports去抛出一些方法:
module.exports = {
print : function(){console.log(12345)}
}
我们也会这样用,只用exports:
exports.name = function(){
console.log('exports 方法');
}
exports.area = (r) => pi * r ** 2;
exports.circumference = (r) => 2 * pi * r;
改变exports的指向后所添加的exports.xxx都是无效的。因为require返回的只会是module.exports
7. fs.statsync(path);
同步的stat(); 方法返回一个stat数组对象;
var fs = require('fs');
var index = fs.statsync(path.join(filepath, filename));
console.log(index); // 返回的是数组对象,然后可以继续进行需要的判断
:
fs.statsync = function(path) {
nullcheck(path);
return binding.stat(pathmodule._makelong(path));
};
stats类中的方法:
方法 描述
stats.isfile() 如果是文件返回 true,否则返回 false。
stats.isdirectory() 如果是目录返回 true,否则返回 false。
stats.isblockdevice() 如果是块设备返回 true,否则返回 false。
stats.ischaracterdevice() 如果是字符设备返回 true,否则返回 false。
stats.issymboliclink() 如果是软链接返回 true,否则返回 false。
stats.isfifo() 如果是fifo,返回true,否则返回 false。fifo是unix中的一种特殊类型的命令管道。
stats.issocket() 如果是 socket 返回 true,否则返回 false。
8. handlebars的helper
handlebars.registerhelper();
handlebars.registerhelper('formatnumber', function(num, options){
num = num + '';
return num.replace(/(=(!^)(:\d{3})+(:\.|$))(\d{3}(\.\d+$))/g,',$1');
});
// 后续待补充:
app.use();
app.enable();
中间件:
中间件可以总结以下几点:
1、封装了一些处理一个完整事件的功能函数。
2、非内置的中间件需要通过安装后,require到文件就可以运行。
3、封装了一些或许复杂但肯定是通用的功能。
上一篇: 数组扁平化解析