入门尝试
web尝试
模块一——HTTP服务器server.js
var http = require("http");
//请求Node.js自带的 http 模块,把它赋值给 http 变量。
http.createServer(function(request, response) {
response.writeHead(200, {
"Content-Type": "text/plain"});//注意小括号里的语法
response.write("Hello World");
response.end();//结束语句是必须的
}).listen(8888);
function say(word) {
console.log(word);
}
function execute(someFunction, value) {
someFunction(value);
}
execute(say, "Hello");
//把 say 函数作为execute函数的第一个变量进行了传递。
//这里传递的不是 say 的返回值,而是 say 本身!
//这样一来, say 就变成了 execute 中的本地变量 someFunction。
function execute(someFunction, value) {
someFunction(value);
}
execute(function(word){
console.log(word);},"Hello");
//跟前一个例子相比,没有定义say函数。
//在 execute 接受第一个参数的地方直接定义了我们准备传递给 execute 的函数。
//用这种方式,我们甚至不用给这个函数起名字,这也是为什么它被叫做 匿名函数 。
var http = require("http");
function onRequest(request,response) {
console.log("Request received.");//新添加的内容
response.writeHead(200, {
"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}
http.createServer(onRequest).listen(8888);
console.log("Server has started.");
//新添加的内容,用来证明代码的有效性,表示创建服务器成功
var http = require("http");
function start() {
//把服务器脚本放到一个叫做 start 的函数里,然后导出这个函数。
//该函数的功能:启动服务器
function onRequest(request, response) {
console.log("Request received.");
response.writeHead(200, {
"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}
http.createServer(onRequest).listen(8888);
console.log("Server has started.");
}
exports.start = start;//导出start函数,注意是exports,不是export
var server = require("./server");//注意:./不能省略
//在这里,可以像使用任何其他的内置模块一样使用server模块:
//请求这个server文件并把它指向一个server变量,其中已导出的函数start()就可以使用了。
server.start();//使用start函数,注意:()不能省略
模块二——路由router.js
var http = require("http");
var url = require("url");//调用Node.js的url模块,建立一个url对象
function start(route) {
//将路由函数route作为参数传递
function onRequest(request, response) {
var pathname = url.parse(request.url).pathname;//注意:request.url
//调用url对象的解析函数parse,找出浏览器请求的URL路径。
//现在可以通过请求的URL路径来区别不同的请求了。
console.log("Request for " + pathname + " received.");
route(pathname);//将pathname作为参数传递给路由
response.writeHead(200, {
"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}
http.createServer(onRequest).listen(8888);
console.log("Server has started.");
}
exports.start = start;
function route(pathname) {
//通过请求的URL路径来区别不同的请求
console.log("About to route a request for " + pathname);
}
exports.route = route;
var server = require("./server");
var router = require("./router");//建立一个router对象
server.start(router.route);
//调用router对象的route函数(在这里,函数作为参数传递)
function start() {
console.log("Request handler 'start' was called.");
}
function upload() {
console.log("Request handler 'upload' was called.");
}
exports.start = start;
exports.upload = upload;
var server = require("./server");
var router = require("./router");
var requestHandlers = require("./requestHandlers");//定义一个新的本地变量
var handle = {
}//创建handle对象
//在JavaScript中,对象就是一个键/值对的集合,这里的“键”是字符串类型,“值”是函数
handle["/"] = requestHandlers.start;//注意:不要()
handle["/start"] = requestHandlers.start;
handle["/upload"] = requestHandlers.upload;
//正如所见,将不同的URL映射到相同的请求处理程序上是很容易的:
//只要在对象中添加一个键为"/"的属性,对应requestHandlers.start即可,
//这样我们就可以干净简洁地配置/start和/的请求都交由start这一个处理程序处理。
server.start(router.route, handle);//handle作为参数传递给服务器
var http = require("http");
var url = require("url");
function start(route, handle) {
//在start()函数里添加了handle参数
function onRequest(request, response) {
var pathname = url.parse(request.url).pathname;
console.log("Request for " + pathname + " received.");
route(handle, pathname);//把handle对象作为参数传递给了route()函数
response.writeHead(200, {
"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}
http.createServer(onRequest).listen(8888);
console.log("Server has started.");
}
exports.start = start;
function route(handle, pathname) {
console.log("About to route a request for " + pathname);
//检查给定的路径对应的请求处理程序是否存在,如果存在的话直接调用相应的函数。
if (typeof handle[pathname] === 'function') {
handle[pathname]();
} else {
console.log("No request handler found for " + pathname+".");
}
}
exports.route = route;
function start() {
console.log("Request handler 'start' was called.");
return "Hello Start";//添加return语句