Node.js(基础知识二)

Node.js(基础知识二)


Node.js路由

通俗地理解,路由是你的请求中所指定需要的数据或者操作的响应封装吧。
我们需要为路由提供请求的URL和其他需要的GET及POST参数,然后路由则可以根据你所提供的数据进行相关的操作,比如说返回对应的数据,比如操作数据库等。使用路由也要引进url和querystring模块,这2个模块里封装的方法便于解析url和里面所设计的参数。
eg:

                     url.parse(urlString).query
                                           |
           url.parse(urlString).pathname      |
                       |                   |
                       |                   |
                     ------ -------------------
http://localhost:8888/start?foo=bar&hello=world
                                ---       -----
                                 |          |
                                 |          |
              querystring.parse(queryString)["foo"]    |
                                            |
                         querystring.parse(queryString)["hello"]

url.pase(urlString).query所获得的字符串传递给querystring.parse()方法,便可以进一步获得具体的附带数据。

当服务器接受到一个请求时,会调用回调函数onRequest(request,response),下面是一个route和server整合的例子。
eg:

//router.js

function route(pathname){
    //pathname是通过调用方使用url模块得到后传递过来的
    // ... 这里通过判断pathname进行对应的数据库操作或者指定返回的response
}
exports.route = route;
//server.js
var http = require("http");
var url = require("url");

function start(route){
   function onRequest(request, response){
   var pathname = url.parse(request.url).pathname;

   route(pathname);

   response.writeHead(200, {"Content-Type":"text/plain"});
   response.write("Hello World");
   response.end();
   }

   http.createServer(onRequest).listen(8888);
}
//index.js,用于绑定上面2者
var server = require("./server");
var router = require("./router");

server.start(router.route);

Node.js全局对象

JavaScript中有一个特殊的对象,称为全局对象,及其所有属性都可以在程序的任何地方访问,即全局变量。
在浏览器JavaScript中,通常window是全局对象,而Node.js中的全局对象时global,所有全局变量都是global对象的属性,即global最根本的作用是作为全局变量的宿主。
比如setTimeout(cb,ms),console,process,_filename等。

Node.js常用工具

util是Node.js核心模块,提供常用函数的集合,用于弥补核心JavaScript的功能。

util.inherits

util.inherits(constructor,superConstructor)是一个实习对象间 原型继承 的函数。
JavaScript的面相对象特性是基于原型的,通过原型复制来实现。
eg:

var util = require('util');
function Base(){
    this.name = 'base';
    this.base = 1991;
    this.sayHello = function(){
    console.log('Hello' + this.name);
    };
}
Base.prototype.showName = function(){
    console.log(this.name);
};
function Sub(){
    this.name = 'sub';
}
util.inherits(Sub,Base);
var objBase = new Base();
objBase.showName();
objBase.sayHello();
console.log(objBase);
var objSub = new Sub();
objSub.showName();
console.log(objSub);

打印结果为:

base
Hello base
{ name: 'base', base: 1991, sayHello: [Function]}
sub
{ name: 'sub' }

Sub仅仅继承了Base在原型中定义的函数,但是在Base中使用原型定义的函数不会被作为对象的属性被输出。

util.inspect

将对象转换为字符串。util.inspect(object,[showHidden],[depth],[colors]),第二个参数为true时会比较详细,depth默认是2层。

Node.js 文件系统

Node.js文件系统模块中的方法均有异步和同步版本,一般多使用异步版本。
异步方法的最后一个参数一定为回调函数,回调函数的第一个参数包含了错误信息。
eg:

var fs = require("fs");

// 异步读取
fs.readFile('input.txt', function (err, data) {
   if (err) {
       return console.error(err);
   }
   console.log("异步读取: " + data.toString());
});

// 同步读取
var data = fs.readFileSync('input.txt');
console.log("同步读取: " + data.toString());

有关文件系统的更多方法属性可以查看这里

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值