为什么express中的module.exports 和 exports 可以同时使用
发布于 8 年前 作者 sun124361111 2995 次浏览 来自 问答

有如下疑惑: express 的 express.js 中 有如下代码

exports = module.exports = createApplication;
function createApplication() {// ...}
exports.application = proto;
exports.request = req;
exports.response = res;

而我写的测试文件 这种写法会报错呢?

exports = module.exports = fun;

function fun(){
    console.log('fun');
};
exports.name = 'sn';
TypeError: Cannot assign to read only property 'na
me' of function fun(){
    console.log('fun');
}
    at Object.<anonymous> (C:\Users\Administrator\
Desktop\node\express\test1.js:9:14)
    at Module._compile (module.js:435:26)
    at Object.Module._extensions..js (module.js:44
2:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Module.require (module.js:366:17)
    at require (module.js:385:17)
    at Object.<anonymous> (C:\Users\Administrator\
Desktop\node\express\test2.js:4:11)
    at Module._compile (module.js:435:26)
    at Object.Module._extensions..js (module.js:44
2:10)

或者说 为什么 express中这样写不会报错呢?

3 回复

使用了这样的方法,成功运行.也许express也是这样用的吧…**

'use strict';
exports = module.exports = fun;
function fun(str){
    return str;
};

var obj = {};
Object.defineProperty(obj,'name',{
    value:'sn',
    writable:true,
    enumerable:true,
    configurable:true
});
exports.obj = obj;

因为你导出的是一个函数。而函数有一个name属性,是定义的时候就确定了的,就是fun。你要导出的值是’sn’的那个变量随便换个其他名字就行了

@Alexis374 刚刚试了下还真是 太感谢了! 我还以为是什么可读可写可枚举呢

回到顶部