Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
angular-emoji-popup
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
angular-emoji-popup
Commits
4383acbe
Commit
4383acbe
authored
Dec 24, 2014
by
Madhur
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added node server
parent
abfad1ff
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
255 additions
and
0 deletions
+255
-0
server.js
server.js
+255
-0
No files found.
server.js
0 → 100644
View file @
4383acbe
#!/usr/bin/env node
var
util
=
require
(
'
util
'
),
http
=
require
(
'
http
'
),
fs
=
require
(
'
fs
'
),
url
=
require
(
'
url
'
),
events
=
require
(
'
events
'
);
var
DEFAULT_PORT
=
8000
;
var
DEFAULT_HOST
=
'
localhost
'
;
function
main
(
argv
)
{
new
HttpServer
({
'
GET
'
:
createServlet
(
StaticServlet
),
'
HEAD
'
:
createServlet
(
StaticServlet
)
}).
start
(
Number
(
argv
[
2
])
||
DEFAULT_PORT
,
argv
[
3
]
||
DEFAULT_HOST
);
}
function
escapeHtml
(
value
)
{
return
value
.
toString
().
replace
(
'
<
'
,
'
<
'
).
replace
(
'
>
'
,
'
>
'
).
replace
(
'
"
'
,
'
"
'
);
}
function
createServlet
(
Class
)
{
var
servlet
=
new
Class
();
return
servlet
.
handleRequest
.
bind
(
servlet
);
}
/**
* An Http server implementation that uses a map of methods to decide
* action routing.
*
* @param {Object} Map of method => Handler function
*/
function
HttpServer
(
handlers
)
{
this
.
handlers
=
handlers
;
this
.
server
=
http
.
createServer
(
this
.
handleRequest_
.
bind
(
this
));
}
HttpServer
.
prototype
.
start
=
function
(
port
,
host
)
{
this
.
port
=
port
;
this
.
host
=
host
;
this
.
server
.
listen
(
port
,
host
);
util
.
puts
(
'
Http Server running at http://
'
+
host
+
'
:
'
+
port
+
'
/
'
);
};
HttpServer
.
prototype
.
parseUrl_
=
function
(
urlString
)
{
var
parsed
=
url
.
parse
(
urlString
);
parsed
.
pathname
=
url
.
resolve
(
'
/
'
,
parsed
.
pathname
);
return
url
.
parse
(
url
.
format
(
parsed
),
true
);
};
HttpServer
.
prototype
.
handleRequest_
=
function
(
req
,
res
)
{
var
logEntry
=
req
.
method
+
'
'
+
req
.
url
;
if
(
req
.
headers
[
'
user-agent
'
])
{
logEntry
+=
'
'
+
req
.
headers
[
'
user-agent
'
];
}
util
.
puts
(
logEntry
);
req
.
url
=
this
.
parseUrl_
(
req
.
url
);
var
handler
=
this
.
handlers
[
req
.
method
];
if
(
!
handler
)
{
res
.
writeHead
(
501
);
res
.
end
();
}
else
{
handler
.
call
(
this
,
req
,
res
);
}
};
/**
* Handles static content.
*/
function
StaticServlet
()
{}
StaticServlet
.
MimeMap
=
{
'
txt
'
:
'
text/plain
'
,
'
html
'
:
'
text/html
'
,
'
css
'
:
'
text/css
'
,
'
xml
'
:
'
application/xml
'
,
'
json
'
:
'
application/json
'
,
'
js
'
:
'
application/javascript
'
,
'
manifest
'
:
'
text/cache-manifest
'
,
'
appcache
'
:
'
text/cache-manifest
'
,
'
jpg
'
:
'
image/jpeg
'
,
'
jpeg
'
:
'
image/jpeg
'
,
'
gif
'
:
'
image/gif
'
,
'
png
'
:
'
image/png
'
,
'
svg
'
:
'
image/svg+xml
'
,
'
wav
'
:
'
audio/wav
'
,
'
ico
'
:
'
image/vnd.microsoft.icon
'
,
'
pexe
'
:
'
application/x-pnacl
'
,
'
bc
'
:
'
application/x-pnacl
'
};
StaticServlet
.
prototype
.
handleRequest
=
function
(
req
,
res
)
{
var
self
=
this
;
var
path
=
(
'
./
'
+
req
.
url
.
pathname
).
replace
(
'
//
'
,
'
/
'
).
replace
(
/%
(
..
)
/g
,
function
(
match
,
hex
){
return
String
.
fromCharCode
(
parseInt
(
hex
,
16
));
});
var
parts
=
path
.
split
(
'
/
'
);
if
(
parts
[
parts
.
length
-
1
].
charAt
(
0
)
===
'
.
'
)
return
self
.
sendForbidden_
(
req
,
res
,
path
);
fs
.
stat
(
path
,
function
(
err
,
stat
)
{
if
(
err
)
return
self
.
sendMissing_
(
req
,
res
,
path
);
if
(
stat
.
isDirectory
())
return
self
.
sendDirectory_
(
req
,
res
,
path
);
return
self
.
sendFile_
(
req
,
res
,
path
);
});
}
StaticServlet
.
prototype
.
sendError_
=
function
(
req
,
res
,
error
)
{
res
.
writeHead
(
500
,
{
'
Content-Type
'
:
'
text/html
'
});
res
.
write
(
'
<!doctype html>
\n
'
);
res
.
write
(
'
<title>Internal Server Error</title>
\n
'
);
res
.
write
(
'
<h1>Internal Server Error</h1>
'
);
res
.
write
(
'
<pre>
'
+
escapeHtml
(
util
.
inspect
(
error
))
+
'
</pre>
'
);
util
.
puts
(
'
500 Internal Server Error
'
);
util
.
puts
(
util
.
inspect
(
error
));
};
StaticServlet
.
prototype
.
sendMissing_
=
function
(
req
,
res
,
path
)
{
path
=
path
.
substring
(
1
);
res
.
writeHead
(
404
,
{
'
Content-Type
'
:
'
text/html
'
});
res
.
write
(
'
<!doctype html>
\n
'
);
res
.
write
(
'
<title>404 Not Found</title>
\n
'
);
res
.
write
(
'
<h1>Not Found</h1>
'
);
res
.
write
(
'
<p>The requested URL
'
+
escapeHtml
(
path
)
+
'
was not found on this server.</p>
'
);
res
.
end
();
util
.
puts
(
'
404 Not Found:
'
+
path
);
};
StaticServlet
.
prototype
.
sendForbidden_
=
function
(
req
,
res
,
path
)
{
path
=
path
.
substring
(
1
);
res
.
writeHead
(
403
,
{
'
Content-Type
'
:
'
text/html
'
});
res
.
write
(
'
<!doctype html>
\n
'
);
res
.
write
(
'
<title>403 Forbidden</title>
\n
'
);
res
.
write
(
'
<h1>Forbidden</h1>
'
);
res
.
write
(
'
<p>You do not have permission to access
'
+
escapeHtml
(
path
)
+
'
on this server.</p>
'
);
res
.
end
();
util
.
puts
(
'
403 Forbidden:
'
+
path
);
};
StaticServlet
.
prototype
.
sendRedirect_
=
function
(
req
,
res
,
redirectUrl
)
{
res
.
writeHead
(
301
,
{
'
Content-Type
'
:
'
text/html
'
,
'
Location
'
:
redirectUrl
});
res
.
write
(
'
<!doctype html>
\n
'
);
res
.
write
(
'
<title>301 Moved Permanently</title>
\n
'
);
res
.
write
(
'
<h1>Moved Permanently</h1>
'
);
res
.
write
(
'
<p>The document has moved <a href="
'
+
redirectUrl
+
'
">here</a>.</p>
'
);
res
.
end
();
util
.
puts
(
'
301 Moved Permanently:
'
+
redirectUrl
);
};
StaticServlet
.
prototype
.
sendFile_
=
function
(
req
,
res
,
path
)
{
var
self
=
this
;
var
file
=
fs
.
createReadStream
(
path
);
res
.
writeHead
(
200
,
{
'
Content-Type
'
:
StaticServlet
.
MimeMap
[
path
.
split
(
'
.
'
).
pop
()]
||
'
text/plain
'
});
// console.log(path.split('.').pop(), StaticServlet.MimeMap[path.split('.').pop()] || 'text/plain');
if
(
req
.
method
===
'
HEAD
'
)
{
res
.
end
();
}
else
{
file
.
on
(
'
data
'
,
res
.
write
.
bind
(
res
));
file
.
on
(
'
close
'
,
function
()
{
res
.
end
();
});
file
.
on
(
'
error
'
,
function
(
error
)
{
self
.
sendError_
(
req
,
res
,
error
);
});
}
};
StaticServlet
.
prototype
.
sendDirectory_
=
function
(
req
,
res
,
path
)
{
var
self
=
this
;
if
(
path
.
match
(
/
[^\/]
$/
))
{
req
.
url
.
pathname
+=
'
/
'
;
var
redirectUrl
=
url
.
format
(
url
.
parse
(
url
.
format
(
req
.
url
)));
return
self
.
sendRedirect_
(
req
,
res
,
redirectUrl
);
}
fs
.
readdir
(
path
,
function
(
err
,
files
)
{
if
(
err
)
return
self
.
sendError_
(
req
,
res
,
error
);
if
(
!
files
.
length
)
return
self
.
writeDirectoryIndex_
(
req
,
res
,
path
,
[]);
var
remaining
=
files
.
length
;
files
.
forEach
(
function
(
fileName
,
index
)
{
fs
.
stat
(
path
+
'
/
'
+
fileName
,
function
(
err
,
stat
)
{
if
(
err
)
return
self
.
sendError_
(
req
,
res
,
err
);
if
(
stat
.
isDirectory
())
{
files
[
index
]
=
fileName
+
'
/
'
;
}
if
(
!
(
--
remaining
))
return
self
.
writeDirectoryIndex_
(
req
,
res
,
path
,
files
);
});
});
});
};
StaticServlet
.
prototype
.
writeDirectoryIndex_
=
function
(
req
,
res
,
path
,
files
)
{
path
=
path
.
substring
(
1
);
res
.
writeHead
(
200
,
{
'
Content-Type
'
:
'
text/html
'
});
if
(
req
.
method
===
'
HEAD
'
)
{
res
.
end
();
return
;
}
res
.
write
(
'
<!doctype html>
\n
'
);
res
.
write
(
'
<title>
'
+
escapeHtml
(
path
)
+
'
</title>
\n
'
);
res
.
write
(
'
<style>
\n
'
);
res
.
write
(
'
ol { list-style-type: none; font-size: 1.2em; }
\n
'
);
res
.
write
(
'
</style>
\n
'
);
res
.
write
(
'
<h1>Directory:
'
+
escapeHtml
(
path
)
+
'
</h1>
'
);
res
.
write
(
'
<ol>
'
);
files
.
forEach
(
function
(
fileName
)
{
if
(
fileName
.
charAt
(
0
)
!==
'
.
'
)
{
res
.
write
(
'
<li><a href="
'
+
escapeHtml
(
fileName
)
+
'
">
'
+
escapeHtml
(
fileName
)
+
'
</a></li>
'
);
}
});
res
.
write
(
'
</ol>
'
);
res
.
end
();
};
// Must be last,
main
(
process
.
argv
);
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment