我是使用javascript编程的新手。我为服务器端选择了angular + node.js。 我经历了角度教程,我有一些关于他们给出的web-server.js的问题。由于角度教程中没有涉及服务器部分,我有一些问题:
使用此命令行运行服务器:
node ./scripts/web-server.js
正在执行的主要功能是“main”,它通过以下方式完成: 主(process.argv);
,功能是:
function main(argv) {
new HttpServer({
'GET': createServlet(StaticServlet),
'HEAD': createServlet(StaticServlet)
}).start(Number(argv[2]) || DEFAULT_PORT);
}
function HttpServer(handlers) {
this.handlers = handlers;
this.server = http.createServer(this.handleRequest_.bind(this));
}
function createServlet(Class) {
var servlet = new Class();
return servlet.handleRequest.bind(servlet);
}
function StaticServlet() {}
StaticServlet.MimeMap = {
'txt': 'text/plain',
'html': 'text/html',
'css': 'text/css',
'xml': 'application/xml',
'json': 'application/json',
'js': 'application/javascript',
'jpg': 'image/jpeg',
'jpeg': 'image/jpeg',
'gif': 'image/gif',
'png': 'image/png',
'svg': 'image/svg+xml'
};
我的问题:
{ 'GET': createServlet(StaticServlet),
'HEAD': createServlet(StaticServlet)
}
我不明白这些行是做什么的。我假设这一行创建了一个对象,但我知道的方式更像是
{
GET: createServlet(StaticServlet),
HEAD: createServlet(StaticServlet)
}
这些行中的'是什么意思?
第二个问题: 这意味着什么?
.start(Number(argv[2]) || DEFAULT_PORT);
HttpServer.prototype.start = function(port) {
this.port = port;
this.server.listen(port);
util.puts('Http Server running at http://localhost:' + port + '/');
};
但我不明白为什么是||和argv [2]实际上是null,所以我们为什么需要传递它。
第三个问题: 关于StaticServlet.MimeMap的创建。 这与我想的第一个问题非常相似。我不明白这里的语法:'txt': 'text/plain',.
它创造了什么?
答案 0 :(得分:1)
扩展Jared上面的评论。
在HttpServlet构造函数和MimeMap初始化程序中使用单引号可能只是原始作者样式首选项。
有时候这是必要的。例如,当使用根据语法规则无效的名称或者是保留的javascript关键字时。
来自A Survey of the JavaScript Programming Language:
在对象文字表示法中,对象描述是一组 花括号内的逗号分隔的名称/值对。名字可以是 标识符或字符串后跟冒号。由于中的错误 语言定义,保留字不能在标识符中使用 形式,但它们可以以字符串形式使用。
例如:
{
'my name here': 'bob',
'0': '',
'new': ''
}
该行:
.start(Number(argv[2]) || DEFAULT_PORT);
基本上只允许您在命令行上传递一个端口,以便调用者可以显式请求服务器侦听该端口而无需修改源。例如:
node ./scripts/web-server.js 8080
可以表达为:
.start( Number(argv[2]) ? Number(argv[2]) : DEFAULT_PORT );
或更长的:
var server = new HttpServer({…});
if(Number(argv[2]) {
server.start(Number(argv[2]);
} else {
server.start(DEFAULT_PORT);
}