我目前正尝试自己学习节点js,而且我也是javascript的新手。当我尝试阅读并理解猫鼬时,我发现了这段代码,没有任何解释。
在var url = require('url');
var fs = require('fs');
exports.get = function(req, res) {
req.requrl = url.parse(req.url, true);
var path = req.requrl.pathname;
if (/\.(css)$/.test(path)){
res.writeHead(200, {'Content-Type': 'text/css'});
fs.readFile(__dirname + path, 'utf8', function (err, data){
if (err) throw err;
res.write(data, 'utf8');
res.end();
});
} else {
if (path === '/' || path === '/home') {
require('./controllers/home-mongoose').get(req, res);
} else {
require('./controllers/404').get(req, res);
}
}
}
:
exports.get
首先,这是exports = function functionA(){}
是什么?我有点明白var router = require('path/router.js');
router.functionA();
意味着当我可以这样做时:
exports.get
但是当你做/\.(css)$/.test(path)
时,我不明白这意味着什么。
其次,def is_in(string_,word_):
import re
return word_ in [''.join(re.split('\(.+?\)\(.+?\)|\(.+?\)',string_))][0]
s = "ABC(L30)(345)DEF, ABC(L2)(45)DEF, ABCDEF, ABC(L10)DEF, ABC(2)DEF"
print(is_in(s,'ABCDEF'))
True
。我没有得到这种表达式语法,任何人都可以向我解释一下吗?感谢
答案 0 :(得分:1)
这不符合你的想法:
exports = function functionA(){}
您必须设置module.exports
,而不是exports
。此外,您将使用:
var router = require('path/router.js');
router();
因为您设置了整个导出,而不是名为functionA
的属性。
但是,您只能在exports
上设置属性:
exports.get = function functionA(){}
这样做是因为在设置模块期间有var exports = module.exports = {}
,module.exports
是最后导出的内容。
设置这样的属性意味着当您需要该模块时,您可以使用该属性:
var router = require('path/router.js');
router.get();
您的第二个问题指向使用正则表达式的行。我建议你做一些关于它们的研究或者问一个第二个问题,如果你想要理解那个特定的那个,但是在Javascript中,你可以通过用斜杠(/
)包围它们来编写文字正则表达式,就像文字字符串被引号包围一样("
/ '
)。
答案 1 :(得分:1)
首先,这是
exports.get
是什么?我有点明白exports = function functionA(){}
意味着当我可以这样做时:var router = require('path/router.js'); router.functionA();
exports = function functionA(){}
实际上并没有按照你的想法去做。
在Node中,exports
只是一个最初引用Object
的变量。并且,该行正在该对象上设置get
属性/方法。
console.log(exports); // {}
exports.get = function () {};
console.log(exports); // { get: function () {} }
exports
引用的对象通常与引用模块/文件时require()
返回的对象相同。
// `router` = `module.exports` from `./path/router.js`
var router = require('./path/router');
router.get()
有关exports
的详细信息,请通读Modules documentation了解Node.js
其次,
/\.(css)$/.test(path)
。我没有得到这种表达式语法,任何人都可以向我解释一下吗?
表达式的第一部分/\.(css)$/
是RegExp literal。
/
是起始和结束分隔符,其行为类似于字符串文字周围的引号。而且,在它们之间,\.(css)$
是定义的模式。
\. // match a single period character
// escaped to disable the period's "any character" meaning
(css) // match the 3 characters, "css", within a capture group
$ // anchor the pattern to the end of the line/string
表达式也可以用RegExp
构造函数编写为:
new RegExp("\\.(css)$").test(path) // note the extra escape needed for the string
答案 2 :(得分:0)
/\.(css)$/
是一个正则表达式,它的作用是检查给定的路径/文件扩展名是否为" .css"。
javascript中有两种构造正则表达式的方法:
使用正则表达式文字:var reg = /[a-b]/;
或使用构造函数var reg = new RegExp("[a-b]");
您可以阅读有关regexp here
的更多信息关于第一个问题,因为@Aaron Dufour已经解释过了,我会相信他;)
答案 3 :(得分:0)