0.2.2 • Published 9 years ago
exseed v0.2.2
Exseed
A highly extensible nodejs framework
Features
- Highly Extensible
- Easy to Use
- Full Stack
- ORM Integrated
- ES6/ES7 Syntax
- Isomorphic
Workflow & Implementation Details
Item | Choice |
---|---|
Build Tool | Webpack |
Automation | Gulp |
Backend | Node, Express(>=4.0.0) |
ORM | Waterline |
Frontend | React, Redux/Alt, React-Router |
Testing | Mocha |
CI | Travis CI |
Compare to Other Frameworks
Exseed | Express | Koa | Sails | Hapi | |
---|---|---|---|---|---|
Extensibility | ★★★★★ | ★★★★★ | ★★★★☆ | ★★★★☆ | ★★★★☆ |
Threshold | ★★★☆☆ | ★★☆☆☆ | ★★★☆☆ | ★★★★☆ | ★★☆☆☆ |
Build Speed | ★★★★★ | ★☆☆☆☆ | ★☆☆☆☆ | ★★★★☆ | ★☆☆☆☆ |
Full Stack | ✔ | ✔ | |||
ORM | ✔ | ✔ | |||
Modern Syntax | ✔ | ✔ | |||
Isomorphic | ✔ |
Usage
Install CLI
$ npm install -g exseed-cli
Clone the boilerplate project
Install dependencies
$ cd exseed-boilerplate $ npm install
Run it
$ sd build --watch $ sd init $ sd serve
Example - Todo List
File Structure
Update installed apps
Tell exseed what apps you want to use
// settings.js export default { installedApps: [ './exseed.core', // other apps './todoapp', ], // other settings };
The server side
// todoapp/settings.js export default { name: 'todo', };
// todoapp/models.js export const todolist = { identity: 'todolist', attributes: { content: { type: 'string', required: true, }, }, };
// todoapp/routes.js import { models } from 'exseed'; export default function routes({ app }) { app.get('/api/todolist', (req, res) => { models.todolist .find() .then((todolist) => { res.json(todolist); }); }); app.post('/api/todolist', (req, res) => { models.todolist .create(req.body.todo) .then((todo) => { res.json(todo); }); }); }
The client side
All react related files are inside
todoapp/flux
folder// todoapp/flux/boot.js import React from 'react'; import { render } from 'react-dom'; import { Router, browserHistory } from 'react-router'; import routes from './routes'; render( <Router history={browserHistory}> {routes} </Router> , document.getElementById('exseed_root'));
// todoapp/flux/routes.js import React from 'react'; import { Route, IndexRoute } from 'react-router'; import settings from '../settings'; import MainPage from './views/pages/MainPage'; export default ( <Route path="/todo" component={MainPage} EXSEED_APP_NAME={settings.name} /> );
// todoapp/flux/views/pages/MainPage.js import React from 'react'; import BaseLayout from '../../../../exseed.core/flux/views/layouts/BaseLayout'; export default class MainPage extends React.Component { ... render() { const scripts = [ 'https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js', '/todo/js/bundle.js', ]; return ( <BaseLayout title="Exseed - Todo" scripts={scripts}> <h1>Todo</h1> <input type="text" onKeyDown={this.handleKeyDown.bind(this)} onChange={this.handleChange.bind(this)} value={this.state.content} /> <ul> {this.state.todos.map(todo => ( <li key={todo.id}> {todo.content} </li> ))} </ul> </BaseLayout> ); } };
See the complete todo app
Docs
0.2.2
9 years ago
0.2.1
9 years ago
0.2.0
9 years ago
0.1.15
9 years ago
0.1.14
10 years ago
0.1.13
10 years ago
0.1.12
10 years ago
0.1.11
10 years ago
0.1.10
10 years ago
0.1.9
10 years ago
0.1.8
10 years ago
0.1.7
10 years ago
0.1.6
10 years ago
0.1.5
10 years ago
0.1.4
10 years ago
0.1.3
10 years ago
0.1.2
10 years ago
0.1.1
10 years ago
0.1.0
10 years ago