exports是将函数能被引用该方法的模块引用到, 它有两种写法node
exports.functionName = function() 和 module.exports = function()express
例子:restful
sourse/sourseList.jsapp
var express = require('express'); var router = express.Router(); var http = require('http'); var url = require('url'); function getProducts1(req,res){ .. res.end(); }; function getProducts2(req,res){ .. res.end(); }; exports.getProducts1 = getProducts1; exports.getProducts2 = getProducts2;
app.js函数
var sourseList = require('./sourse/sourseList'); app.get('/sourseList1', sourseList.getProducts1 ); //指定路游 app.get('/sourseList2', sourseList.getProducts2 );
这里exports对设置了两个属性,引用该模块的代码就能访问到getProducts1 、getProducts2这两个函数工具
另外一种写法:post
sourse/sourseList.jsui
var express = require('express'); var router = express.Router(); var http = require('http'); var url = require('url'); router.route('/').get(function(req, res) { .. rs.end(); }); router.route('/').post(function(req, res) { .. rs.end(); }); module.exports = router;
app.jsurl
var sourseList = require('./sourse/sourseList'); app.use('/sourseList', sourseList);
这是一个restful风格的方法, app.js经过use的方式监听了关于'/sourseList'地址的全部请求rest
经过这大约知道了两个导出方式的不一样,
普通的exports能够灵活的包涵各式各样的方法,而module.exports只能包含关于'/sourseList'的方法,
nodeJs in action书里是这么介绍的 “ 若是只须要从模块中获得一个函数,那从require中返回一个函数的代码要比返回一个对象的代码更优雅。”
其实最终在程序里导出的是module.exports,exports只不过是它的一个辅助工具。 最终返回给调用的是Module.exports而不是exports。全部的exports收集到的属性和方法,都赋值给了Module.exports。固然,这有个前提,就是Module.exports自己不具有任何属性和方法。若是,Module.exports已经具有一些属性和方法,那么exports收集来的信息将被忽略。