express Router对象
2016-03-17 19:14
363 查看
express如何使用在这里我就不多赘述了,你可以去看文档,有中文的,但我建议你直接看英文的,避免被中文的翻译质量和古老版本的文档坑。
我只想告诉你如何查阅以及分析源码,找到每个方法的入口,每个对象从何而来。
先来看express中Router的用法:
来看一下express的几本目录结构
从一个包中直接导入模块,比如
打开这个文件我们发现只有区区两行代码:
如果会Python的同学肯定似曾相识,这个
我们又把目标转向了
这里不得不说一下
全局函数
来看一个例子:
结果:
现在你明白
好了,我们来看
这个
我只想告诉你如何查阅以及分析源码,找到每个方法的入口,每个对象从何而来。
先来看express中Router的用法:
var express = require('express'); var router = express.Router(); router.get('/detail/:id', detail.detail) router.get('/', index.home);
来看一下express的几本目录结构
test/ example/ lib/ --- middleware/ --- router/ --- express.js --- request.js --- response.js --- application.js --- utils.js --- view.js index.js package.json
从一个包中直接导入模块,比如
express = require("express")。没有指定到底是哪个文件,而是直接以包名的方式导入,那么解释器先搜索有没package.json文件,设置没有相关的设置,再搜索有没有
index.js这个文件。
打开这个文件我们发现只有区区两行代码:
'use strict'; module.exports = require('./lib/express');
如果会Python的同学肯定似曾相识,这个
index.js文件的作用不是和
__init__.py差不多吗!我告诉你,差别还是有的!Python中的包必须有
__init__.py以声明文件夹是个Python包。但Nodejs却不会强制每个包必须有
index.js文件,只不过你需要以
require("modulename")直接导入包的时候,解释器会搜索这个文件。
我们又把目标转向了
lib目录下的
express.js文件,可以不带
.js后缀名,解释器会自动搜索。
这里不得不说一下
module.exports这个特殊的模块组织方式了。
全局函数
require导入一个包的时候,不会像其他语言一样将包中的东西全局导入,而只会导入
module.exports这个模块,它默认是个空对象
{}。我们常会看到有些包以这样的形式书写
exports = module.exports = createApplication;,
exports其实是对
module.exports的一个引用,因此如果把
module.exports改变后,还需要把
exports的引用也指向它,不然
exports还是指向原来的对象。
来看一个例子:
module.js exports.a = function a() {}; exports.b = function b() {}; exports.c = function c() {};
main.js var m = reuqire('module.js'); console.log(m.a, m.b, m.c)
结果:
[Function: a] [Function: b] [Function: c]
现在你明白
module.exports有什么作用了吧,并且你会喜欢上这种模块导入方式的,Nodejs只能导入
module.exports这个对象,避免了作用域的污染。不像Python可以用
from module import *这种即不直观又污染作用域的方式乱来。
好了,我们来看
express.js文件,
exports = module.exports = createApplication;
这个
createApplication是个函数,返回值……
相关文章推荐
- C++第2次上机实验-C++程序的编写和运行
- Android API level 版本对应关系
- Python/Ruby/Go/Node 之四国大战
- 第二次作业
- centos7安装docker
- 欧拉与鸡蛋
- Tomcat 的热部署和加载
- Android新手入门2016(9)--ListView之SimpleAdapter和SimpleCursorAdapter
- 动态导入(import)和静态导入(import)的区别
- 读书笔记-js
- Python/Ruby/Go/Node 之四国大战
- 【tyvj1038】忠诚
- linux基础正则表达式
- IOS 渐变的图层,CAGradientLayer
- 关于svn hooks拦截设置
- Android音频底层调试-基于tinyalsa
- 将博客搬至CSDN
- STM32F103 与 STM32F407引脚兼容问题
- ZOJ 1100 Mondriaan's Dream
- 机房重构打包