Nodejs coffeescript+express4+redis 实现的漂流瓶例子

Nodejs coffeescript+express4+redis 实现的漂流瓶例子

概述

  • 例子来自 《node.js 实战》这本书的第三章的超级简化版。
  • 用 coffeeScript & express4 & redis。
  • 重点在于体验了redis。

功能

  1. 捡漂流瓶
  2. 扔漂流瓶
  3. 漂流瓶存活有效期
  4. 捡到漂流瓶的几率

演示

点我立即看demo

由于使用的是免费空间,频繁点击和网络过慢都能出现异常的情况,刷新页面重试即可。

技术: coffeescript+express4+redis
时间: 2014年7月
源码: simple-redis-drift-bottle
我的博客: think2011

4 回复

Nodejs coffeescript+express4+redis 实现的漂流瓶例子

概述

  • 例子来自《node.js 实战》这本书的第三章的超级简化版。
  • 使用 coffeeScriptexpress4redis
  • 重点在于体验了 redis

功能

  1. 捡漂流瓶:用户可以随机捡到一个漂流瓶。
  2. 扔漂流瓶:用户可以创建一个新的漂流瓶。
  3. 漂流瓶存活有效期:漂流瓶会在一段时间后失效。
  4. 捡到漂流瓶的几率:增加或减少用户捡到漂流瓶的概率。

演示

漂流瓶演示

点击这里立即看demo

由于使用的是免费空间,频繁点击和网络过慢都可能导致异常情况,刷新页面重试即可。

技术

示例代码

以下是一些核心代码片段,用于实现上述功能:

# 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}"

解释

  1. 捡漂流瓶:当用户访问 /bottle 路由时,Redis 的 randomkey 方法会随机返回一个键,表示用户捡到了一个漂流瓶。
  2. 扔漂流瓶:当用户访问 /bottle 并发送 POST 请求时,服务器会将漂流瓶的内容保存到 Redis 中,并记录当前时间戳。
  3. 漂流瓶存活有效期:可以通过设置 TTL(生存时间)来限制漂流瓶的有效期。例如,可以在 Redis 中设置一个过期时间。
  4. 捡到漂流瓶的几率:通过调整 Redis 的数据结构和逻辑,可以控制用户捡到漂流瓶的概率。

以上是一个简单的示例,展示了如何使用 coffeescriptexpress4redis 来实现一个基本的漂流瓶系统。


能说一下,你用 的免费空间 是什么呀?

空间用的是 cloud9 数据库是 redis togo

Nodejs coffeescript+express4+redis 实现的漂流瓶例子

概述

  • 例子来自《Node.js 实战》这本书的第三章的超级简化版。
  • 使用CoffeeScript、Express 4和Redis实现。
  • 重点在于体验Redis。

功能

  1. 捡漂流瓶:用户可以从Redis中随机获取一个漂流瓶。
  2. 扔漂流瓶:用户可以向Redis中添加一个新的漂流瓶。
  3. 漂流瓶存活有效期:设置每个漂流瓶的存活时间。
  4. 捡到漂流瓶的几率:用户捡到漂流瓶的概率可以调整。

示例代码

以下是一个简化的示例代码,展示如何使用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模板引擎渲染漂流瓶内容。

这个示例代码提供了一个简单的框架,你可以在此基础上进一步扩展和完善功能。

回到顶部