๐Ÿ”™ Back to Top

Fri Feb 27 13:10:24 JST 2015

ใ‚คใƒณใ‚ฟใƒผใƒณใ‚ทใƒƒใƒ—ใฎ็ตŒ้จ“ใ‚’ใƒ–ใƒญใ‚ฐใซๆ›ธใใ“ใจใŒ่ฆ่ซ‹ใ•ใ‚Œใฆใ„ใ‚‹ใ‚‰ใ—ใ„ใฎใงไธ‹ๆ›ธใใ‚’ใ“ใ“ใซๆ›ธใ“ใ†ใ€‚

express v.4.12.0 ใ‚’็”จใ„ใŸ็ฐกๆ˜“ใ‚ตใƒผใƒ

ไปฅไธ‹ใฏใƒŸใƒ‰ใƒซใ‚ฆใ‚งใ‚ข (ๅพŒ่ฟฐ) ใ‚’็”จใ„ใชใ„ใ€ / ใธใฎ POST ใ‚’่ชญใ‚“ใงใ€ ใƒ˜ใƒƒใƒ€ใ‚’ๅซใ‚ใฆๅ—ใ‘ๅ–ใฃใŸใƒ‡ใƒผใ‚ฟใ‚’ใใฎใพใพ่ฟ”ใ™ใ ใ‘ใฎใ‚ตใƒผใƒ

express = require 'express'

app = express()

app.post '/', (req, res) ->
  buf = ''
  req.on 'data', (chunk) ->
    buf += chunk
  req.on 'end', ->
    res.end buf

app.listen 3030, (->)

ใ“ใ‚Œใ‚’ๅ‹•ใ‹ใ—ใฆใ€ curl ใ‚ณใƒžใƒณใƒ‰ใงใฎใƒชใ‚ฏใ‚จใ‚นใƒˆใฎ้ฃ›ใฐใ—ๆ–นใ‚’ใ„ใใคใ‹็ดนไป‹ใ™ใ‚‹:

   echo HOGEHOGE | curl -X POST -F 'hoge=<-' localhost:3030
--------------------------1bee3ed01c9645db
Content-Disposition: form-data; name="hoge"

HOGEHOGE

--------------------------1bee3ed01c9645db--
   echo HOGEHOGE | curl -X POST -F 'hoge=@-' localhost:3030
--------------------------be462c8006a6ea41
Content-Disposition: form-data; name="hoge"; filename="-"
Content-Type: application/octet-stream

HOGEHOGE

--------------------------be462c8006a6ea41--
   curl -X POST -d hoge=fuga localhost:3030
hoge=fuga
   curl -X POST -d name=cympfh -d pwd=koregacympfhnopwd localhost:3030
name=cympfh&pwd=koregacympfhnopwd

ใชใ‚‹ใปใฉใ€่‡ชๅŠ›ใงใƒ‘ใƒผใ‚ตใ‚’ๆ›ธใใฎใฏ่พ›ใใ†ใงใ‚ใ‚‹

ใƒŸใƒ‰ใƒซใ‚ฆใ‚งใ‚ขใงใ‚ใ‚‹ใจใ“ใ‚ใฎ body-parser v.1.12.0 ใ‚’ๅ™›ใพใ›ใ‚‹

express = require 'express'
bodyParser = require 'body-parser'

app = express()
app.use bodyParser.urlencoded { extended: false }
app.use bodyParser.json()

app.post '/', (req, res) ->
  res.json req.body

app.listen 3030, (->)
   echo HOGEHOGE | curl -X POST -F 'hoge=<-' localhost:3030
{}

-F ใง้€ใ‚‹ form-data ใฏใฉใ†ใ‚„ใ‚‰ express ใงใฏ็„ก่ฆ–ใ•ใ‚Œใ‚‹ใ‚‰ใ—ใ„? (cf. Node.jsใฎExpressใงmultipart/form-dataใ‚’ๅ‡ฆ็†ใ™ใ‚‹ๆ–นๆณ• - himetani's blog)

   curl -X POST -d 'name=cympfh' localhost:3030
{"name":"cympfh"}
   curl -X POST -d 'name=cympfh&password=myStr0ngPassWord' localhost:3030
{"name":"cympfh","password":"myStr0ngPassWord"}

้žๅŒๆœŸ็š„ๅ‡ฆ็†

nodeใงๅ‹•ใ‹ใ™ใจใฏใคใพใ‚Š้žๅŒๆœŸ็š„ๅ‡ฆ็†ใ‚’ๆนฏๆฐดใฎใ‚ˆใ†ใซ่กŒใ†ใ“ใจ

express = require 'express'
bodyParser = require 'body-parser'

app = express()
app.use bodyParser.urlencoded { extended: false }
app.use bodyParser.json()

asyncFn = (cont) ->
  setTimeout (-> cont { ok: 'ok' }), 2000

app.post '/', (req, res) ->
  asyncFn (data) ->
    res.json data

app.listen 3030, (->)

ใ•ใฆใ€ฮท-ๅค‰ๆ›ใจใฏใ€(lambda (x) (f x)) ใจ f ใŒ็ญ‰ไพกใงใ‚ใ‚‹ใ“ใจใ‚’ใ„ใ†. CoffeeScript ใชใ„ใ— JavaScript ใงใฏใฉใ†ใ‹

express = require 'express'
bodyParser = require 'body-parser'

app = express()
app.use bodyParser.urlencoded { extended: false }
app.use bodyParser.json()

asyncFn = (cont) ->
  setTimeout (-> cont { ok: 'ok' }), 2000

app.post '/', (req, res) ->
  asyncFn res.json # i found a bug here

app.listen 3030, (->)

ใ“ใ‚Œใ‚’ๅฎŸ่กŒใ™ใ‚‹้–“ใซ้ฉๅˆ‡ใชPOSTใ‚’ๆŠ•ใ’ใ‚‹ใจใ€ ใ“ใ‚Œใฏๆฌกใฎใ‚ˆใ†ใชใ‚จใƒฉใƒผใ‚’ๅใ„ใฆๆญปใฌ:

/usr/local/lib/node_modules/express/lib/response.js:226
  var replacer = app.get('json replacer');
                     ^
TypeError: Cannot call method 'get' of undefined
  at json (/usr/local/lib/node_modules/express/lib/response.js:226:22)
  at [object Object]._onTimeout (/Users/cympfh/test/test.coffee:9:18)
  at Timer.listOnTimeout [as ontimeout] (timers.js:112:15)

ๆœ€็ต‚็™บ่กจใฎๆ—ฅใ€ ็งใŒใฎใ‚“ใณใ‚Šไผšๅ ดใซ็€ใ„ใฆใ€ ้ฏ–ใŒไฝ•ใ‚‚่ฟ”ใ—ใฆใ“ใชใ„ใจใƒกใƒณใƒใซๆŒ‡ๆ‘˜ใ•ใ‚Œใ€ ใ„ใ‚„ใ„ใ‚„ใƒญใ‚ฐใ‚’ใฟใ‚‹ใจใ“ใ‚“ใชใ‚จใƒฉใƒผใ ใฃใŸใ‹ใ‚‰ใ€ ๅ•้กŒใฎ็ฎ‡ๆ‰€ใ‚’่ฆ‹ใคใ‘ใ‚‹ใซ็›ธๅฝ“ใฎ่‹ฆๅŠดใ‚’่ฆใ—ใŸใ€‚ (ใ‚ใ‹ใฃใฆใใ‚Œใ‚‹ใงใ—ใ‚‡ใ†?)

asyncFn = (res) ->
  setTimeout (-> res.json { ok: 'ok' }), 2000

app.post '/', (req, res) ->
  asyncFn res

ใ“ใ‚Œใฏใ†ใพใๅ‹•ใใ€‚ ใ‚‚ใ—ใ‹ใ—ใŸใ‚‰ใ€ res.json ใฏresใจใ„ใ†ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฎใƒกใ‚ฝใƒƒใƒ‰ใ‚’่ชญใ‚“ใง ใใ‚Œใฏใƒ€ใ‚คใƒŠใƒŸใƒƒใ‚ฏใ‚นใ‚ณใƒผใƒ—ใชใฎใ‹๏ผŸ

Obj =
  i: 1
  read: -> @i

console.warn Obj.read() # 1

async = (fn) ->
  setTimeout (-> console.warn fn()), 2000
async Obj.read # undefined

ไธ–็•ŒใŒๅนณๅ’Œใงใ‚ใ‚Šใพใ™ใ‚ˆใ†ใซใ€‚

่ฟฝ่จ˜; Mon Dec 28 01:48:15 JST 2015

ๆ•™่จ“ใฏใ€ ใƒฉใƒ ใƒ€่จˆ็ฎ—ใฎใƒฌใƒ™ใƒซใงๆˆใ‚Š็ซ‹ใคใ“ใจใŒๅˆฅใช่จ€่ชžใงๆˆใ‚Š็ซ‹ใŸใชใใŸใฃใฆใ€ ่ชฐใ‚’ๆจใ‚“ใงใ‚‚ใ„ใ‘ใชใ„ใจใ„ใ†ใ“ใจใงใ‚ใ‚‹. ๆ˜Žใ‚‰ใ‹ใซใ€ๆ™ฎ้€šใƒ—ใƒญใ‚ฐใƒฉใƒŸใƒณใ‚ฐ่จ€่ชžใจๅ‘ผใฐใ‚Œใ‚‹ใ‚‚ใฎใฏใƒฉใƒ ใƒ€ๅผใ‚ˆใ‚Šใ‚‚้ซ˜ใ„่กจ็พๅŠ›ใ‚’ๆŒใค. ไพ‹ใˆใฐใƒ‘ใ‚ค่จˆ็ฎ—ใฏใƒฉใƒ ใƒ€้ …ใ‚’่กจ็พใงใใ‚‹ใŒใใ‚ŒไปฅไธŠใฎ่กจ็พๅŠ›ใ‚’ๆŒใค. (ไธ€่ˆฌใซ) (ๅž‹ใฎ็„กใ„) ใƒ‘ใ‚ค่จˆ็ฎ—ใงใฏใ‚จใƒผใ‚ฟๅค‰ๆ›ใฏๆˆ็ซ‹ใ—ใชใ„.