Node.js笔记(三)路由和socket.io

本文参考了《Node应用程序构建——使用MongoDB和backbone》的第二章 ————————————————————————————————

路由

依赖于ConnectHTTP服务器框架,Express提供了视图渲染和一种描述路由的语言

要使用express,首先要安装express,安装过程不再描述, 看下面一段示例代码:

var express = require(‘express’);var app = express();app.name = req.params.name;switch ( name ? name.toLowerCase() : ” ) {case ‘larry’:case ‘curly’:case ‘moe’:res.send(name + ‘ is my favourite stooge.’);break;default:next();}});app.get(‘/stooges/*?’, function(req, res){ res.send(‘no stooges listed’);});app.get(‘/?’, function(req, res){ res.send(‘hello worldss’);});var port = 8080;app.listen(port);console.log(‘Listening on port ‘ + port);

应用初始化的时候,定义了三个路由 /stooges/[name] 等待一个伙伴的名字输入 /stooges/上一个路由提供的1名字没找到,给出反馈信息 /一个默认的路由,用于访问主页

在第一个路由,express会匹配三个名字,如果对应上了就会显示相应信息 比如运行后浏览器输入:

localhost:8080/stooges/larry

就会显示相应的信息

第一个路由中的next参数: next函数只是express尝试处理匹配当前请求的下一个路由。 如果输入localhost:8080/stooges会被第一个路由处理,但没有提供名字,switch调用next函数,,然后跳到下一个路由

使用模板

jade在概念上类似css,能产生清晰简洁的代码,用于制作网页 使用jade前要先安装:

npm install jade

还是刚才的路由代码,加上了jade代码

var express = require(‘express’);var app = express();/*加载jade*/app.set(‘view engine’, ‘jade’);app.set(‘view options’, { layout: true });app.set(‘views’, __dirname + ‘/views’);/**/app.name = req.params.name;switch ( name ? name.toLowerCase() : ” ) {case ‘larry’:case ‘curly’:case ‘moe’:res.render(‘stooges’, {stooge: name});break;default:next();}});app.get(‘/stooges/*?’, function(req, res){ res.render(‘stooges’, {stooge: null});});app.get(‘/?’, function(req, res){ res.render(‘index’);});var port = 8080;app.listen(port);console.log(‘Listening on port ‘ + port);

新增了

app.set(‘view engine’, ‘jade’);app.set(‘view options’, { layout: true });app.set(‘views’, __dirname + ‘/views’);

三行代码, 第一行声明所用的模板引擎,第二行不大清楚,应该是配置之类的 第三行指明了文件位置,存放在名为views的目录下,_ _dirname指明了相对路径 代码中并没有实例化jade,是因为express的渲染命令 res.render(); 会自己加载所需要的jade

布局

看看layout.jade的代码

doctype My Web Siteblock scripts block content

原书里面的第一句是这样写的

表示html5 在最新的版本里面已经不支持这样的写法。 关于jade的内容先写到这里

socket.io

惯例先安装,看下面的代码:

var express = require(‘express’);var http = require(‘http’);var app = express();var server = http.createServer(app);var io = require(‘socket.io’).listen(server);var catchPhrases = [‘Why I oughta…’, ‘Nyuk Nyuk Nyuk!’, ‘Poifect!’, ‘Spread out!’, ‘Say a few syllables!’, ‘Soitenly!’];app.set(‘view engine’, ‘jade’);app.set(‘view options’, { layout: true });app.set(‘views’, __dirname + ‘/views’);app.get(‘/stooges/chat’, function(req, res, next) { res.render(‘chat’);});io.sockets.on(sendChat = function( title, text ) {socket.emit(‘chat’, {title: title,contents: text}); };/*******以下为5秒发一条消息*******/ setInterval(randomIndex = Math.floor(Math.random()*catchPhrases.length)sendChat(‘Stooge’, catchPhrases[randomIndex]); }, 5000); sendChat(‘Welcome to Stooge Chat’, ‘The Stooges are on the line’); socket.on(‘chat’, function(data){sendChat(‘You’, data.text); });});app.get(‘/?’, function(req, res){ res.render(‘index’);});var port = 8080;server.listen(port);console.log(‘Listening on port ‘ + port);接受失败等于打破完美的面具,接受失败等于放松自己高压的心理,

Node.js笔记(三)路由和socket.io

相关文章:

你感兴趣的文章:

标签云: