所谓“路由”,就是指为不同的访问路径,指定不同的处理方法。
(1)指定根路径
在app.js之中,先指定根路径的处理方法。
app.get("/", function(req, res) {
res.send("Hello World");
});
上面代码的get方法,表示处理客户端发出的GET请求。相应的,还有app.post、app.put、app.del(delete是JavaScript保留字,所以改叫del)方法。
get方法的第一个参数是访问路径,正斜杠(/)就代表根路径;第二个参数是回调函数,它的req参数表示客户端发来的HTTP请求,res参数代表发向客户端的HTTP回应,这两个参数都是对象。在回调函数内部,使用HTTP回应的send方法,表示向浏览器发送一个字符串。然后,运行下面的命令。
node app.js
此时,在浏览器中访问http://127.0.0.1:3000,网页就会显示“Hello World”。
如果需要指定HTTP头信息,回调函数就必须换一种写法,要使用setHeader方法与end方法。
app.get("/", function(req, res){
var body = "Hello World";
res.setHeader("Content-Type", "text/plain");
res.setHeader("Content-Length", body.length);
res.end(body);
});
(2)指定特定路径
上面是处理根目录的情况,下面再举一个例子。假定用户访问/api路径,希望返回一个JSON字符串。这时,get可以这样写。
app.get("/api", function(request, response) {
response.send({name:"张三",age:40});
});
上面代码表示,除了发送字符串,send方法还可以直接发送对象。重新启动node以后,再访问路径/api,浏览器就会显示一个JSON对象。
{
"name": "张三",
"age": 40
}
我们也可以把app.get的回调函数,封装成模块。先在routes目录下面建立一个api.js文件。
// routes/api.js
exports.index = function (req, res){
res.json(200, {name:"张三",age:40});
}
然后,在app.js中加载这个模块。
// app.js
var api = require("./routes/api");
app.get("/api", api.index);
现在访问时,就会显示与上一次同样的结果。
如果只向浏览器发送简单的文本信息,上面的方法已经够用;但是如果要向浏览器发送复杂的内容,还是应该使用网页模板。