今天看了下Node.js,感觉还挺容易接受的,下面分享一下我的心得。
首先,Node.js提供了一个能让后台代码,比如链接数据库,页面跳转等功能变成完全由JS来写的环境。。
先下载下来吧 http://nodejs.org/
完了直接安装,步骤很简单,不详细介绍了。
先写一个Hello World:
创建一个文件 HELLO.js
console.log("Hello World!");
随笔把它放在哪个位置都行,比如c:\myTest\HELLO.js
然后打开cmd,定位到c:\myTest
执行 node HELLO.js;命令
OK,打印出Hello World! 就是如此简单。
那么Express又是什么呢?
相信大家一定用过ssh吧,就是JAVAEE的一个框架,Express也是一个框架,不过这个框架类似于ssh中的struts,主要提供的一个route功能,就是页面跳转!
这个不用下载,因为这个相当于node的一个模块或者说扩展。
如何安装呢?
还是刚才的c:\myTest,在里面新建一个文件
package.json
{
"name": "helo-world",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node app"
},
"dependencies": {
"express": "3.1.0",
"ejs": "*",
"mysql":"*"
}
}
意思就是建了一个project名字叫helo-world,然后这个项目用了express,OK
打开cmd,定位c:\myTest,执行npm install命令,解释一下,这个命令会自动找到package.json文件然后执行它,完成后可以发现文件夹下多了一个node_modules的文件里
面有express,到这里这个含有express的项目已经建好了就是myText文件夹。
但是怎么运行呢,首先你得有一个app.js文件 类似于ssh里的WEB.XML文件
/**
* Module dependencies.
*/
var express = require('express')
, http = require('http')
, path = require('path')
, mysql = require('./db');
var app = express();
app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});
app.configure('development', function(){
app.use(express.errorHandler());
});
var employeeProvider= new EmployeeProvider('localhost', 27017);
//Routes
//index
app.get('/', function(req, res){
});
//list employee
app.get('/employee/list', function(req, res) {
mysql.query('select * from users', function(err, result) {
if(!err){
res.render('employee_new', {
data: result
});
}
});
});
app.listen(process.env.PORT || 3000);
代码的前几行,意思就是引入几个模块这些模块是node提供的,http和path模块
然后app这么变量是整个项目的变量,通过它可以设置项目的一些配置
app.router是不知道干嘛用的,但express.js的官方文件是这句可有可无,并且经过测试还真的是这样,不过还是写上吧。
比如设置监听的端口,base路径等。
app.set('view engine', 'ejs');
这段代码是说node需要一个页面渲染的模块,在node里通常有jade或者ejs。
以前用过spring mvc的都应该知道吧 页面渲染模块就是替代jsp的东西,要比jsp渲染的快,例如Velocity。。
ejs也是需要安装的,不过我们已经在package.jso写过了,所以已经和Express一块安装好了。
app.use(express.static(path.join(__dirname, 'public')));
这句代码就是说定义了一个public路径,这个路径下的文件是对外公开的,可以放一些css或者javascript文件。
app.set('views', __dirname + '/views');
指定了view的路径,然后就可以直接调用render(文件名)的方法来render啦。
app.configure('development', function(){
app.use(express.errorHandler());
});
定义了项目字啊开发模式下要使用错误处理 errorHandler()这是express提供的,就相当于struts的errorAction一样!
app.get('/', function(req, res){
req.send("Hi!");
});
接下来该说怎么使用mysql了,当然mysql模块也是要安装的,不过我们已经安装好了,详见package.json文件
写一个db.js和seeting.js
var mysql = require('mysql'),
settings = require('../settings');
var connection = mysql.createConnection({
host : settings.host,
port : settings.port,
database : settings.db_name,
user : settings.username,
password : settings.password
});
connection.connect();
module.exports = connection;
module.exports = {
cookieSecret: 'myblog_mysql',
db_name: 'blog_mysql',
host: 'localhost',
username: 'root',
password: 'root'
};
这些文件都能看懂吧,说明一下我理解的module是一个关键字,相当于return,就是说明我这个文件返回也就是exports一个类型的数据,当别的文件调用时,可以直接使用,不用new!
app.get('/employee/list', function(req, res) {
mysql.query('select * from users', function(err, result) {
if(!err){
res.render('employee_list', {
data: result
});
}
});
});
这个get方法就是接受路径是employee/list,然后调用mysql.query来查询数据,注意,数据是通过回调方法来取得的,可以看到大部分的node代码都是有回调函数,估计这和js是单线程有关吧
然后就是建一个employee_list的文件employee_list.ejs,
<% data.forEach(function(post, index){%>
<p><%= post.name %></p>
<%}%>
就和在jsp里写java代码一样!!
OK到这里,一个简单的用node连接数据库的demo就写完了,自我感觉不是很难,以后会更新更进一步的node和express的东西,希望多多支持!
express的文档http://expressjs.com/api.html