nodejs模块使用
HTTP模块
Node中HTTP接口被设计用来支持HTTP协议中原来使用很困难的特性,特别是一些很大或者块编码的消息。在处理的时候,这些接口会非常谨慎,它从来不会把请求(request)和响应(response)完全的缓存下来。
HTTP 的消息头(Headers)通过如下对象来表示:
{ 'content-length': '123',
'content-type': 'text/plain',
'connection': 'keep-alive',
'host': 'mysite.com',
'accept': '*/*' }
其中键为小写字母,值是不能修改的。
常用方法
http.createServer([requestListener])
返回一个新的web服务器对象
参数 requestListener 是一个函数,它将会自动加入到 'request' 事件的监听队列.
server.listen(port, [hostname], [backlog], [callback])
开始在指定的主机名和端口接收连接。如果省略主机名,服务器会接收指向任意IPv4地址的链接(INADDR_ANY)。
监听一个 unix socket, 需要提供一个文件名而不是端口号和主机名。
这个函数是异步的。最后一个参数callback会被作为事件监听器添加到 'listening'事件。
server.timeout
- {Number} 默认 120000 (2 分钟)
一个套接字被判断为超时之前的闲置毫秒数。
注意套接字的超时逻辑在连接时被设定,所以更改这个值只会影响新创建的连接,而不会影响到现有连接。
response.writeHead(statusCode, [reasonPhrase], [headers])
向请求回复响应头. statusCode是一个三位是的HTTP状态码, 例如 404. 最后一个参数, headers, 是响应头的内容. 可以选择性的,把人类可读的‘原因短句’作为第二个参数。
var body = 'hello world';
response.writeHead(200, {
'Content-Length': body.length,
'Content-Type': 'text/plain' });
这个方法只能在当前请求中使用一次,并且必须在response.end()之前调用。
如果你在调用这之前调用了response.write()或者 response.end() , 就会调用这个函数,并且 不明/容易混淆 的头将会被使用。
注意:Content-Length 是以字节(byte)计,而不是以字符(character)计。之前的例子奏效的原因是字符串'hello world'只包含了单字节的字符。如果body包含了多字节编码的字符,就应当使用Buffer.byteLength()来确定在多字节字符编码情况下字符串的字节数。需要进一步说明的是Node不检查Content-Lenth属性和已传输的body长度是否吻合。
response.setHeader(name, value)
为默认或者已存在的头设置一条单独的头内容。如果这个头已经存在于 将被送出的头中,将会覆盖原来的内容。如果我想设置更多的头, 就使用一个相同名字的字符串数组
response.setHeader("Content-Type", "text/html");
response.end([data], [encoding])
当所有的响应报头和报文被发送完成时这个方法将信号发送给服务器;服务器会认为这个消息完成了。 每次响应完成之后必须调用该方法。
http.request(options, callback)
Node维护几个连接每个服务器的HTTP请求。 这个函数允许后台发布请求。
options可以是一个对象或一个字符串。如果options是一个字符串, 它将自动使用url.parse()解析。
URL模块
该模块包含用以 URL 解析的实用函数。 使用 require('url') 来调用该模块。
常用方法
url.parse(urlStr, [parseQueryString], [slashesDenoteHost])
输入 URL 字符串,返回一个对象。
将第二个参数设置为 true 则使用 querystring 模块来解析 URL 中的查询字符串部分,默认为 false。
将第三个参数设置为 true 来把诸如 //foo/bar 这样的URL解析为 { host: 'foo', pathname: '/bar' } 而不是 { pathname: '//foo/bar' }。 默认为 false。
url.resolve(from, to)
给定一个基础URL路径,和一个href URL路径,并且象浏览器那样处理他们可以带上锚点。 例子:
url.resolve('/one/two/three', 'four') // '/one/two/four'
url.resolve('http://example.com/', '/one') // 'http://example.com/one'
url.resolve('http://example.com/one', '/two') // 'http://example.com/two'
FS模块
文件系统模块是一个简单包装的标准 POSIX 文件 I/O 操作方法集。您可以通过调用require('fs')来获取该模块。文件系统模块中的所有方法均有异步和同步版本。
文件系统模块中的异步方法需要一个完成时的回调函数作为最后一个传入形参。 回调函数的构成由您调用的异步方法所决定,通常情况下回调函数的第一个形参为返回的错误信息。 如果异步操作执行正确并返回,该错误形参则为null或者undefined。
如果您使用的是同步版本的操作方法,则一旦出现错误,会以通常的抛出错误的形式返回错误。 你可以用try和catch等语句来拦截错误并使程序继续进行。
这里是一个异步版本的例子:
fs.unlink('/tmp/hello', function (err) {
if (err) throw err;
console.log('successfully deleted /tmp/hello');
});
这是同步版本的例子:
fs.unlinkSync('/tmp/hello')
console.log('successfully deleted /tmp/hello');
在繁重的任务中,强烈推荐使用这些函数的异步版本.同步版本会阻塞进程,直到完成处理,也就是说会暂停所有的连接.
常用方法
fs.mkdir(path, [mode], callback)
异步版的 mkdir(2)。 异步版的 link(2). 完成时的回调函数(callback)只接受一个参数:可能出现的异常信息。文件 mode 默认为 0777。
fs.mkdirSync(path, [mode])
同步版的 mkdir(2)。
fs.close(fd, callback)
fs.close(fd, callback)
同步版的 close(2).
fs.write(fd, buffer, offset, length[, position], callback)
通过文件标识fd,向指定的文件中写入buffer。
offset 和length 可以确定从哪个位置开始写入buffer。
position 是参考当前文档光标的位置,然后从该处写入数据。如果typeof position !== 'number',那么数据会从当前文档位置写入,请看pwrite(2)。
回调中会给出三个参数 (err, written, buffer),written 说明从buffer写入的字节数。
注意,fs.write多次地在同一个文件中使用而没有等待回调是不安全的。在这种情况下,强烈推荐使用fs.createWriteStream。
fs.readFileSync(filename, [options])
fs.readFile的同步版本。 返回文件名为 filename 的文件内容。
如果 encoding 选项被指定, 那么这个函数返回一个字符串。如果未指定,则返回一个原生buffer。
更多参考