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][,…]), 可以连接任意多个路径字符串。要连接的多个路径可做为参数传入;**

const path = require('path');

path.join('path1','path2');
//返回 path1/path2

path.join(__dirname, 'index.js')
//返回 /users/workspace/test/index.js ,__dirname 表示当前运行环境绝对路径

//path.join()方法用于拼接路径,并返回该路径,结合__dirname可以达到path.resolve()方法同样的效果
5. 检测文件路径

fs.existsSync(path); 同步版的 fs.exists(),exists是已经废弃的,但是existsSync不是!由于该方法属于fs模块,使用前需要引入fs模块(var fs= require(“fs”) );
参数: path 是欲检测的文件路径。**

fs.existsSync = function(path) {
    try {
        nullCheck(path);
        binding.stat(pathModule._makeLong(path));
        return true;
    } catch (e) {
        return false;
    }
};
6. module.exports和exports

exports , 通过在特殊的 exports 对象上指定额外的属性,函数和对象可以被添加到模块的根部。模块内的本地变量是私有的,因为模块被 Node.js 包装在一个函数中(详见模块包装器)。

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、封装了一些或许复杂但肯定是通用的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值