这个字符串语法在javascripts中意味着什么?

时间:2015-10-02 02:20:55

标签: javascript node.js mongoose export

我目前正尝试自己学习节点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 。我没有得到这种表达式语法,任何人都可以向我解释一下吗?感谢

4 个答案:

答案 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中有两种构造正则表达式的方法:

  1. 使用正则表达式文字:var reg = /[a-b]/;

  2. 或使用构造函数var reg = new RegExp("[a-b]");

  3. 您可以阅读有关regexp here

    的更多信息

    关于第一个问题,因为@Aaron Dufour已经解释过了,我会相信他;)

答案 3 :(得分:0)

1)exports对象只是一个对象,用于将代码放在一个文件中,可用于其他地方的代码。因此,在您的情况下,exports.get只是定义一个名为" get"的属性。而这个属性恰好是一个功能。有关Node.js模块格式的详细概述,see here

2)/\.(css)$/.test(path)相当于说"嘿,看看变量" path"并查看它是否以" .css"结尾。有关.test see here的更多信息。