Nodejs学习笔记(一):
本博文是阅读吴海星译的《Nodejs实战》一书的学习笔记和总结:
- Markdown和扩展Markdown简洁的语法
- 代码块高亮
- 图片链接和图片上传
- LaTex数学公式
- UML序列图和流程图
- 离线写博客
- 导入导出Markdown文件
- 丰富的快捷键
一、代码的目录结构:
二、安装依赖项mime和socket.io
然后执行npm init 命令生成package.json文件
三、server.js代码如下:
var http = require('http');
var fs = require('fs');
var path = require('path'); //内建的path模块提供了与文件系统路径相关的功能
var mime = require('mime'); //附加的mime模块是有根据文件扩展名得出MIME类型的能力
var cache = {}; //cache用来缓存文件内容的对象
function send404(res){//请求文件不存在是发送404错误
res.writeHead(404,{'Content-Type':'text/plain'});
res.write('Error 404: resource not found.');
res.end();
}
function sendFile(res,filePath,fileContents){//辅助函数提供文件数据服务
res.writeHead(
200,
{"Content-Type":mime.lookup{path.basename{filePath}}}
);
res.end{fileContents};
}
function serverStatic(res,cache,absPath){
if(cache[absPath]){
sendFile(res,absPath,cache[absPath]);
}
else{
fs.exists(absPath,function(exists){
if(exists){
fs.readFile(absPath,function(err,data){
if(err){
send404(res);
}else{
cache[absPath] = data;
sendFile(res,absPath,data);
}
});
}else{
send404(res);
}
});
}
}
var server = http.createServer(function(req,res){
var filePath = false;
if(req.url == '/'){
filePath = 'public/index.html';
}else{
filePath = 'public' + req.url;
}
var absPath = './' + filePath;
serverStatic(res,cache,absPath);
});
server.listen(3000,function(){
console.log("Server listening on port 3000");
}
public目录下新建index.html文件。代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>chat</title>
<link rel="stylesheet" href="/stylesheets/style.css">
</head>
<body>
<div class="content">
<div class="room"></div>
<div class="messages"></div>
<form id="send-form">
<input type="text" id="send-message">
<input type="submit" value='send' id="send-button">
<div id="help">
Chat commands:
<ul>
<li>Change nickname:<code>/nick[username]</code></li>
<li>Join/create room:<code>/join[room name]</code></li>
</ul>
</div>
</form>
</div>
<script src='/socket.io/socket.io.js' type='text/javascript'></script>
<script src='/javascripts/jquery.min.js' type="text/javascript"></script>
<script src='/javascripts/chat.js' type="text/javascript"></script>
<script src='/javascripts/chat_ui.js' type="text/javascript"></script>
</body>
</html>
style.css文件代码如下:
body{
padding: :50px;
font:14px "Lucida Grande",Helvetica,Arial,sans-serif;
}
a{
color:#00B7FF;
}
#content{
width: 800px;
margin-left: auto;
margin-right: auto;
}
#room{
background-color: #ddd;
margin-bottom: lem;
}
#message{
width: 690px;
height: 300px;
overflow: auto;
background-color: #eee;
margin-bottom:1em;
margin-right:10px;
}