Javascript 什么';这个字符串语法在Java脚本中的意思是什么?
我目前试图自己学习NodeJS,而且我对javascript也完全陌生。当我试图阅读和理解猫鼬时,我发现了这个代码,没有任何解释 在Javascript 什么';这个字符串语法在Java脚本中的意思是什么?,javascript,node.js,mongoose,export,Javascript,Node.js,Mongoose,Export,我目前试图自己学习NodeJS,而且我对javascript也完全陌生。当我试图阅读和理解猫鼬时,我发现了这个代码,没有任何解释 在router.js中: 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)$
router.js
中:
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=function function(){}
意味着当我可以这样做时:
var router = require('path/router.js');
router.functionA();
var router = require('path/router.js');
router.functionA();
但是我不明白当你进行导出时它意味着什么
其次,/\(css)$/.test(path)
。我不懂这个表达式的语法,有人能给我解释一下吗?谢谢这并不像你想象的那样:
exports = function functionA(){}
您必须设置模块。导出
,而不是导出
。此外,您还可以将其用于:
var router = require('path/router.js');
router();
因为您设置了整个导出,而不是名为function
的属性
但是,您可以仅在导出上设置属性:
exports.get = function functionA(){}
这是因为在模块的设置过程中有一个var exports=module.exports={}
,并且module.exports
是最后导出的内容
设置这样的属性意味着,当您需要模块时,可以使用该属性:
var router = require('path/router.js');
router.get();
第二个问题指向使用正则表达式的一行。我建议你对它们做一些研究,或者问第二个问题,如果你想了解那个特定的问题,但是在Javascript中,你可以通过用斜杠(/
)包围它们来编写文字正则表达式,就像文字字符串被引号包围一样(“
/”
)。/\(css)$/
是一个正则表达式,它所做的就是检查给定的路径/文件扩展名是否为“.css”
在javascript中,有两种方法可以构造正则表达式:
使用正则表达式文本:var reg=/[a-b]/;
或者使用构造函数var reg=new RegExp(“[a-b]”;
您可以阅读有关regexp的更多信息
关于第一个问题,既然@Aaron Dufour已经解释过了,我相信他;)
首先,这是什么exports.get
?我有点理解exports=function function(){}
意味着当我可以做这样的事情时:
var router = require('path/router.js');
router.functionA();
var router = require('path/router.js');
router.functionA();
exports=function function(){}
实际上并不像您所想的那样
在节点中,只是一个最初引用对象的变量
。该行正在该对象上设置get
属性/方法
console.log(exports); // {}
exports.get = function () {};
console.log(exports); // { get: function () {} }
导出
引用的对象通常与require()
引用模块/文件时返回的对象相同
// `router` = `module.exports` from `./path/router.js`
var router = require('./path/router');
router.get()
有关导出的详细信息,请通读For Node.js
其次,/\(css)$/.test(path)
。我不懂这个表达式的语法,有人能给我解释一下吗
表达式的第一部分,/\(css)$/
,是一个
/
s是起始和结束分隔符,其行为类似于字符串文字周围的引号。在它们之间,\(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
1) exports
对象只是一个对象,用于使一个文件中的代码可用于其他地方的代码。因此,在您的情况下,exports.get
只是定义一个名为“get”的属性,而该属性恰好是一个函数。要了解Node.js模块格式,请参阅
2) /\(css)$/.test(path)
相当于说“嘿,看看变量“path”,看看它是否以“.css”结尾”。有关.test
的更多信息,请参见,谢谢。我得到第一个。我会做研究的,谢谢。我会读的。虽然我没有足够的力量来提升你的awnserI,但我很乐意帮助你:)我明白了。但是我没有通过测试。通常,在其他语言中,它应该是另一种方式,如path.test(…)
。无论如何,非常感谢