在服务端运行的javascript就叫做node.js。
已经有了tomcat这样基于java的服务器,那么node.js的优势在哪里?
1.node.js上的应用可以使用javascript开发,这边方便前端人员。
2.node.js上的I/O是非阻塞式的,比tomcat的阻塞式更有优势。
node.js入门:
接下来编写服务器代码:
在src下创建文件server.js
var http = require('http'); //引入http模块
var url = require('url'); //引入url模块,帮助解析
var queryString = require('querystring'); //引入querystring库,帮助解析
function service(request,response){ //准备处理请求和响应的service函数
var arg = url.parse(request.url).query; //获取返回的url对象的query属性值
var params = queryString.parse(arg); //将arg字符串反序列化成一个对象
console.log("method - " + request.method); //打印请求方法
console.log("url - " + request.url); //打印请求url
console.log("id - " + params.id); //获取请求id
response.writeHead(200,{'Content-Type':'text/plain'});
response.end("Hello Node.js");
}
var server = http.createServer(service); //基于service来创建服务器
server.listen(8088); //服务器监听8088端口
运行:
在命令行中运行如下命令:
e:
cd e:\project\nodejs\src
node server.js
这样就启动了服务端,并运行刚才的server.js代码了
然后浏览器中输入地址http://127.0.0.1:8088/进行测试
模块:
所谓模块,就是别人写好的js
例如前面例子中引入的http模块
var http = require('http')
在server.js同一目录下创建how2j.js,在how2j.js中定义两个函数,
function service(request,response) {
response.writeHead(200,{'Content-Type':'text/plain'});
response.end('hello Node.js');
}
function sayhello(){
console.log('hello from how2j.js');
}
exports.hi = sayhello;
exports.service = service;
//需要通过exports指定如何去调用这两个函数,才能被外部调用。
server.js中:
var http = require('http');
var how2j = require("./how2j"); //引入how2j模块,./表示同级目录
how2j.hi(); //调用how2j中的sayhello()函数
var server = http.createServer(how2j.service); //创建基于how2j.service()函数的服务。
server.listen(8088);
通过在浏览器中输入http://127.0.0.1:8088来进行测试。
路由:
例如:
业务逻辑模块:requestHandlers.js
function listCategory(){
return "a lot of categorys";
}
function listProduct(){
return "a lot of products";
}
exports.listCategory = listCategory;
exports.listProduct = listProduct;
路由模块:router.js
function route(handle,pathname){
if(typeof handle[pathname] === 'function'){
return handle[pathname]();
}else{
return pathname + ' is not defined';
}
}
exports.route = route;
服务器模块:server.js
var http = require("http");
var url = require("url");
function start(route,handle){
function onRequest(request,response) {
var pathname = url.parse(request.url).pathname;
var html = route(handle,pathname);
response.writeHead(200,{"Content-Type":"text/plain"});
response.write(html);
response.end();
}
http.createServer(onRequest).listen(8088);
}
exports.start = start;
入口主模块:index.js
var server = require("./server");
var router = require("./router");
var requestHandlers = require("./requestHandlers");
var handle = {}
handle["/listCategory"] = requestHandlers.listCategory;
handle["/listProduct"] = requestHandlers.listProduct;
server.start(router.route,handle);
在命令行中输入node index.js启动服务器
在浏览器中输入http://127.0.0.1:8088/listProduct或者http://127.0.0.1:8088/listCategory
执行过程分析:
启动index,会调用server的start函数,并将router.js中的route函数和handle数组作为参数,在server的start函数中通过8088端口启动服务,用onRequest函数来处理业务,首先访问url的pathname属性,然后调用router.js中的route函数,并能将handle和pathname作为参数传递进去。在router.js中,通过pathname获取真正的业务函数,并将业务函数的返回值返回。
当访问地址是/listCategory的时候,真正调用的是requestHandlers.js中国的listCategory()函数,/listProduct同理。
文件操作:
例如:
在src下创建文件how2j.html,并在其中写入hello from how2j
写业务处理模块requestHandler.js
var fs = require("fs"); //引入文件模块
//读方法
function readFile(){
var html = fs.readFileSync("how2j.html"); //readFileSync表示同步读
return html;
}
//写方法
function writeFile(){
fs.writeFile("how2java.html","hello from how2java");
return "write successful";
}
exports.readFile = readFile;
exports.writeFile = writeFile;
主模块index.js中添加
handle["/readFile"] = requestHandlers.readFile;
handle["/writeFile"] = requestHandlers.writeFile;
重启后在浏览器中输入:
http://127.0.0.1:8088/readFile或者http://127.0.0.1:8088/writeFile
npm概念
npm是随同nodeJS一起安装的包管理工具。
使用npm可以下载别人发布的模块使用,也可以发布自己的模块。
npm命令用于从国外的服务器上下载别人做好的模块,会受到网速等的影响。所以我们可以使用cnpm,通过国内的服务器下载,c表示copy的意思。
安装cnpm:
npm install -g cnpm --registry=https://registry.npm.taobao.org
-g是-global的意思,即全局安装,而不是安装在当前目录下。
node.js数据库:
创建数据库:
create database node.js
创建表结构:
use node.js
CREATE TABLE category_(
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(30),
PRIMARY KEY (id),
)DEFAULT CHARSET=UTF8
准备数据:
use node.js
delete from category_;
insert into category_ values(null,"category1");
insert into category_ values(null,"category2");
insert into category_ values(null,"category3");
安装数据库模块:
npm install mysql --save
npm run是npm run -script的简写,也就是执行脚本的意思,执行的脚本配置在package.json中的scripts对象中。
网友评论