接下来我们创建一个简单的http server,我们需要使用到http模块,这是一个内核模块,所以无需npm install:
// require core module http
var http = require("http");
// create http server, port 3000
http.createServer(function(request, response){
// http request handling code
response.writeHead(200, {"Content-Type": "text/html"});
response.end("<html><body>Home, URL was: " + request.url + "</body></html>");
}).listen(3000, "localhost");
console.log("Server running at http://localhost:3000/");
代码中已经包含注释,比较容易看得懂了,其中的function(request, response)对于对java熟悉的朋友应该非常熟悉,servlet中也有类似的代码。
可能大家觉得以上的代码还是有些繁琐,我们也可以使用一个非核心的connect模块来简化代码:
var connect = require("connect");
var app = connect().use(connect.static("public")).use(
function(req, resp) {
resp.end("Couldn't find it.");
}).listen(3500);
我们的代码简化了,而且如果我们拷贝一份静态的html页面到public目录后会发现,目录中的页面、图片等资源可以通过url方式访问,且输入无效的url还能提示“Couldn't find it.”,注意.static("public")需要放置在use之前,表示静态url优先处理,处理不了的再去通过function处理。
我们的第三个例子演示如何处理http提交部分的代码:
我们在public目录下有一个html文件:
<html>
<body>
<form action="/process" method="post">
<label for="name">Name</label><input type="text" name="name" value="" id="name">
<label for="repeat">Repeat</label><input type="text" name="repeat" value="" id="repeat">
<p><input type="submit" value="Submit"></p>
</form>
</body>
</html>
这个页面提交后的action是process,所以我们的脚本文件如下:
var connect = require('connect');
// handling request order:
// 1.body parser,so we can handle body object
// 2.set public as our url root "/"
// 3.if url is "/process", print ...; else print "Invalid request"
var app = connect()
.use(connect.bodyParser())
.use(connect.static('public'))
.use(function (req, res) {
if (req.url === '/process') {
res.end(req.body.name + ' would repeat ' + req.body.repeat + ' times.');
} else {
res.end("Invalid Request");
}
})
.listen(3700);
最后我们来看看如何手动处理响应(response)的例子:
其中一个例子是使服务器返回各种错误:
var connect = require('connect');
var app = connect()
.use(function (req, res) {
// output "Forbidden" text
res.end("Forbidden");
})
.listen(3800);
我们打开浏览器的调试窗口,再来让服务器返回一个403错误:
var connect = require('connect');
var app = connect()
.use(function (req, res) {
// set status code
res.statusCode = 403;
// output "Forbidden" text
res.end("Forbidden");
})
.listen(3800);
接下来我们看如何返回JSON数据:
var connect = require('connect');
var my_data = {
'fruit': 'apple',
'number': '555-1212',
'color': 'purple'
};
var app = connect()
.use(function (req, res) {
// set content header
res.setHeader('Content-Type', 'application/json');
// output json string data
res.end(JSON.stringify(my_data));
})
.listen(3900);
至此,关于如何创建一个简单的http server部分已经讲完。