models: fix state namespace
This commit is contained in:
@@ -88,7 +88,6 @@ document.body.appendChild(tree)
|
|||||||
```
|
```
|
||||||
|
|
||||||
## Concepts
|
## Concepts
|
||||||
`choo` is a complete framework. It has an answer to pretty most points
|
|
||||||
- __user:__ 🙆
|
- __user:__ 🙆
|
||||||
- __DOM:__ the [Document Object Model][dom] is what is currently displayed in
|
- __DOM:__ the [Document Object Model][dom] is what is currently displayed in
|
||||||
your browser
|
your browser
|
||||||
@@ -417,6 +416,13 @@ Also imagine telling some business people you chose to rewrite something
|
|||||||
critical to the company using the `choo` framework.
|
critical to the company using the `choo` framework.
|
||||||
:steam_locomotive::train::train::train:
|
:steam_locomotive::train::train::train:
|
||||||
|
|
||||||
|
### Why is it a framework, and not a library?
|
||||||
|
I love small libraries that do one thing well, but when working in a team,
|
||||||
|
having an undocumented combination of packages often isn't great. `choo()` is a
|
||||||
|
small set of packages that work well together, wrapped in an an architectural
|
||||||
|
pattern. This means you get all the benefits of small packages, but get to be
|
||||||
|
productive right from the start.
|
||||||
|
|
||||||
### How does choo compare to X?
|
### How does choo compare to X?
|
||||||
Ah, so this is where I get to rant. `choo` (_chugga-chugga-chugga-choo-choo!_)
|
Ah, so this is where I get to rant. `choo` (_chugga-chugga-chugga-choo-choo!_)
|
||||||
was built because other options didn't quite cut it for me, so instead of
|
was built because other options didn't quite cut it for me, so instead of
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function request (uri, send) {
|
function request (uri, send, state) {
|
||||||
http(uri, { json: true }, function (err, res, body) {
|
http(uri, { json: true }, function (err, res, body) {
|
||||||
if (err) return send('app:error', { payload: 'HTTP error' })
|
if (err) return send('app:error', { payload: 'HTTP error' })
|
||||||
if (res.statusCode !== 200) {
|
if (res.statusCode !== 200) {
|
||||||
@@ -24,7 +24,6 @@ function request (uri, send) {
|
|||||||
return send('app:error', { payload: message })
|
return send('app:error', { payload: message })
|
||||||
}
|
}
|
||||||
if (!body) {
|
if (!body) {
|
||||||
console.log('req made!')
|
|
||||||
return send('app:error', { payload: 'fatal: no body received' })
|
return send('app:error', { payload: 'fatal: no body received' })
|
||||||
}
|
}
|
||||||
send('api:set', { payload: body.message || body.title })
|
send('api:set', { payload: body.message || body.title })
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
effects: {
|
effects: {
|
||||||
error: function (action, state, send) {
|
error: function (action, state, send) {
|
||||||
const timeout = state.app.errorTimeDone - Date.now()
|
const timeout = state.errorTimeDone - Date.now()
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
send('app:error:delete')
|
send('app:error:delete')
|
||||||
}, timeout)
|
}, timeout)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ const http = require('http')
|
|||||||
const PORT = 8080
|
const PORT = 8080
|
||||||
|
|
||||||
const server = http.createServer(createRouter())
|
const server = http.createServer(createRouter())
|
||||||
server.listen(PORT, () => console.log(`listening on port ${PORT}`))
|
server.listen(PORT, () => process.stdout.write(`listening on port ${PORT}\n`))
|
||||||
|
|
||||||
var index = 0
|
var index = 0
|
||||||
const errors = [
|
const errors = [
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ const http = require('http')
|
|||||||
const PORT = 8080
|
const PORT = 8080
|
||||||
|
|
||||||
const server = http.createServer(createRouter())
|
const server = http.createServer(createRouter())
|
||||||
server.listen(PORT, () => console.log(`listening on port ${PORT}`))
|
server.listen(PORT, () => process.stdout.write(`listening on port ${PORT}\n`))
|
||||||
|
|
||||||
function createRouter () {
|
function createRouter () {
|
||||||
const router = serverRouter('/404')
|
const router = serverRouter('/404')
|
||||||
|
|||||||
+23
-11
@@ -2,21 +2,33 @@ const serverRouter = require('server-router')
|
|||||||
const http = require('http')
|
const http = require('http')
|
||||||
|
|
||||||
const PORT = 8080
|
const PORT = 8080
|
||||||
|
|
||||||
const client = require('./client')
|
const client = require('./client')
|
||||||
|
|
||||||
const server = http.createServer(createRouter())
|
// If an incoming request accepts "text/html", render the
|
||||||
server.listen(PORT, () => console.log(`listening on port ${PORT}`))
|
// appropriate HTML. Else use the API server
|
||||||
|
const apiRouter = createRouter()
|
||||||
|
const server = http.createServer(function (req, res) {
|
||||||
|
if (/text\/html/.test(req.headers.accept)) handleHtml(req, res)
|
||||||
|
else apiRouter(req, res)
|
||||||
|
})
|
||||||
|
server.listen(PORT, () => process.stdout.write(`listening on port ${PORT}\n`))
|
||||||
|
|
||||||
|
// create a new router
|
||||||
|
// null -> fn
|
||||||
function createRouter () {
|
function createRouter () {
|
||||||
const router = serverRouter('/404')
|
const apiRouter = serverRouter('/404')
|
||||||
|
apiRouter.on('/404', (req, res) => res.end('not found'))
|
||||||
router.on('/404', (req, res) => res.end('not found'))
|
apiRouter.on('/', (req, res) => {
|
||||||
router.on('/', function (req, res, params) {
|
res.end(JSON.stringify({ routes: [ '/', '/404' ] }))
|
||||||
const html = client.toString('/', { message: 'hello server!' })
|
|
||||||
res.setHeader('Content-Type', 'text/html; charset=utf-8')
|
|
||||||
res.end(html)
|
|
||||||
})
|
})
|
||||||
|
return apiRouter
|
||||||
|
}
|
||||||
|
|
||||||
return router
|
// render the client to string
|
||||||
|
// based on the requested url
|
||||||
|
// (obj, obj) -> null
|
||||||
|
function handleHtml (req, res) {
|
||||||
|
const html = client.toString(req.url, { message: 'hello server!' })
|
||||||
|
res.setHeader('Content-Type', 'text/html; charset=utf-8')
|
||||||
|
res.end(html)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -105,17 +105,16 @@ function choo () {
|
|||||||
const _reducers = ns ? reducers[ns] : reducers
|
const _reducers = ns ? reducers[ns] : reducers
|
||||||
if (_reducers && _reducers[action.type]) {
|
if (_reducers && _reducers[action.type]) {
|
||||||
if (ns) {
|
if (ns) {
|
||||||
const newState = reducers[ns][action.type](action, state[ns])
|
const newState = _reducers[action.type](action, state[ns])
|
||||||
state[ns] = xtend(state[ns], newState)
|
state[ns] = xtend(state[ns], newState)
|
||||||
} else {
|
} else state = xtend(state, reducers[action.type](action, state))
|
||||||
state = xtend(state, reducers[action.type](action, state))
|
|
||||||
}
|
|
||||||
reducersCalled = true
|
reducersCalled = true
|
||||||
}
|
}
|
||||||
|
|
||||||
const _effects = ns ? effects[ns] : effects
|
const _effects = ns ? effects[ns] : effects
|
||||||
if (_effects && _effects[action.type]) {
|
if (_effects && _effects[action.type]) {
|
||||||
_effects[action.type](action, state, send)
|
if (ns) _effects[action.type](action, state[ns], send)
|
||||||
|
else _effects[action.type](action, state, send)
|
||||||
effectsCalled = true
|
effectsCalled = true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,7 +174,7 @@ function appInit (opts) {
|
|||||||
return model
|
return model
|
||||||
|
|
||||||
// create a new subscription that modifies
|
// create a new subscription that modifies
|
||||||
// 'app:location' and push it to the subs
|
// 'app:location' and push it to be loaded
|
||||||
// fn -> null
|
// fn -> null
|
||||||
function pushLocationSub (cb) {
|
function pushLocationSub (cb) {
|
||||||
model.subscriptions.push(function (send) {
|
model.subscriptions.push(function (send) {
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@ const http = require('http')
|
|||||||
const PORT = 8080
|
const PORT = 8080
|
||||||
|
|
||||||
const server = http.createServer(createRouter())
|
const server = http.createServer(createRouter())
|
||||||
server.listen(PORT, () => console.log(`listening on port ${PORT}`))
|
server.listen(PORT, () => process.stdout.write(`listening on port ${PORT}\n`))
|
||||||
|
|
||||||
function createRouter () {
|
function createRouter () {
|
||||||
const router = serverRouter('/404')
|
const router = serverRouter('/404')
|
||||||
|
|||||||
Reference in New Issue
Block a user