Nodejs coffeescript+express4+redis 实现的漂流瓶例子
Nodejs coffeescript+express4+redis 实现的漂流瓶例子
概述
- 例子来自 《node.js 实战》这本书的第三章的超级简化版。
- 用 coffeeScript & express4 & redis。
- 重点在于体验了redis。
功能
- 捡漂流瓶
- 扔漂流瓶
- 漂流瓶存活有效期
- 捡到漂流瓶的几率
演示
由于使用的是免费空间,频繁点击和网络过慢都能出现异常的情况,刷新页面重试即可。
技术: coffeescript+express4+redis
时间: 2014年7月
源码: simple-redis-drift-bottle
我的博客: think2011
4 回复
Nodejs coffeescript+express4+redis 实现的漂流瓶例子
概述
- 例子来自《node.js 实战》这本书的第三章的超级简化版。
- 使用
coffeeScript
、express4
和redis
。 - 重点在于体验了
redis
。
功能
- 捡漂流瓶:用户可以随机捡到一个漂流瓶。
- 扔漂流瓶:用户可以创建一个新的漂流瓶。
- 漂流瓶存活有效期:漂流瓶会在一段时间后失效。
- 捡到漂流瓶的几率:增加或减少用户捡到漂流瓶的概率。
演示
由于使用的是免费空间,频繁点击和网络过慢都可能导致异常情况,刷新页面重试即可。
技术
- 技术:coffeescript + express4 + redis
- 时间:2014年7月
- 源码:simple-redis-drift-bottle
- 博客:think2011
示例代码
以下是一些核心代码片段,用于实现上述功能:
# app.coffee
express = require 'express'
redis = require 'redis'
app = express()
port = process.env.PORT || 3000
# Redis 客户端
client = redis.createClient()
# 路由处理
app.get '/bottle', (req, res) ->
# 捡漂流瓶
client.randomkey (err, reply) ->
if err
res.send "Error: #{err}"
else
res.json { bottle: reply }
app.post '/bottle', (req, res) ->
# 扔漂流瓶
bottleContent = req.body.content
client.set bottleContent, new Date().getTime(), (err, reply) ->
if err
res.send "Error: #{err}"
else
res.send "Bottle thrown successfully"
app.listen port, () ->
console.log "Server running on port #{port}"
解释
- 捡漂流瓶:当用户访问
/bottle
路由时,Redis 的randomkey
方法会随机返回一个键,表示用户捡到了一个漂流瓶。 - 扔漂流瓶:当用户访问
/bottle
并发送 POST 请求时,服务器会将漂流瓶的内容保存到 Redis 中,并记录当前时间戳。 - 漂流瓶存活有效期:可以通过设置 TTL(生存时间)来限制漂流瓶的有效期。例如,可以在 Redis 中设置一个过期时间。
- 捡到漂流瓶的几率:通过调整 Redis 的数据结构和逻辑,可以控制用户捡到漂流瓶的概率。
以上是一个简单的示例,展示了如何使用 coffeescript
、express4
和 redis
来实现一个基本的漂流瓶系统。
能说一下,你用 的免费空间 是什么呀?
空间用的是 cloud9 数据库是 redis togo
Nodejs coffeescript+express4+redis 实现的漂流瓶例子
概述
- 例子来自《Node.js 实战》这本书的第三章的超级简化版。
- 使用CoffeeScript、Express 4和Redis实现。
- 重点在于体验Redis。
功能
- 捡漂流瓶:用户可以从Redis中随机获取一个漂流瓶。
- 扔漂流瓶:用户可以向Redis中添加一个新的漂流瓶。
- 漂流瓶存活有效期:设置每个漂流瓶的存活时间。
- 捡到漂流瓶的几率:用户捡到漂流瓶的概率可以调整。
示例代码
以下是一个简化的示例代码,展示如何使用CoffeeScript、Express 4和Redis实现漂流瓶的基本功能。
安装依赖
npm install express connect-redis coffee-script redis --save
main.coffee
express = require 'express'
RedisStore = require('connect-redis')(express)
app = express()
redisClient = require('redis').createClient()
# 设置视图引擎为jade
app.set 'views', __dirname + '/views'
app.set 'view engine', 'jade'
# 配置静态资源路径
app.use express.static(__dirname + '/public')
# 配置会话
app.use express.cookieParser()
app.use express.session(
secret: 'secret'
store: new RedisStore(client: redisClient)
)
# 路由定义
app.get '/bottle/toss', (req, res) ->
message = req.query.message
if message?
redisClient.setex "bottle_#{Date.now()}", 60, message, (err, reply) ->
if err?
res.send 'Error tossing bottle'
else
res.redirect '/bottle/pick'
else
res.send 'Message required to toss a bottle'
app.get '/bottle/pick', (req, res) ->
redisClient.keys 'bottle_*', (err, keys) ->
if err?
res.send 'Error picking bottle'
else
if keys.length > 0
key = keys[Math.floor(Math.random() * keys.length)]
redisClient.get key, (err, message) ->
if err?
res.send 'Error picking bottle'
else
res.render 'bottle', {message: message}
else
res.send 'No bottles available'
# 启动服务器
app.listen 3000, ->
console.log 'Server running on port 3000'
views/bottle.jade
doctype
html
head
title Drift Bottle
body
h1 Drift Bottle
p #{message}
解释
- main.coffee:
- 使用CoffeeScript编写,配置Express和Redis。
/bottle/toss
路由处理扔漂流瓶逻辑,将消息保存到Redis,并设置存活时间为60秒。/bottle/pick
路由处理捡漂流瓶逻辑,从Redis中随机选择一个漂流瓶并返回。
- views/bottle.jade:
- 使用Jade模板引擎渲染漂流瓶内容。
这个示例代码提供了一个简单的框架,你可以在此基础上进一步扩展和完善功能。