EXPRESS SWEET's application generator.
A comprehensive list of changes in each version may be found in the CHANGELOG.
npm install -g express-sweet-generator
Use the application generator tool, express-sweet-generator
, to quickly create an application skeleton.
- For example, the following creates an Express app named
myapp
. The app will be created in a folder namedmyapp
in the current working directory.express-sweet -o esm myapp
- Then install dependencies.
cd myapp/ npm install
- The skeleton uses a DB. Please create a DB with the following SQL.
CREATE DATABASE IF NOT EXISTS `sample_db` DEFAULT CHARACTER SET utf8mb4; USE `sample_db`; CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL, `email` varchar(255) NOT NULL, `password` varchar(100) NOT NULL, `icon` varchar(768) NOT NULL DEFAULT MD5(RAND()), `created` datetime NOT NULL DEFAULT current_timestamp(), `modified` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`id`), UNIQUE KEY `ukUserEmail` (`email`), UNIQUE KEY `ukUserIcon`(`icon`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `profile` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `userId` int(10) unsigned NOT NULL, `address` varchar(255) NOT NULL, `tel` varchar(14) NOT NULL, `created` datetime NOT NULL DEFAULT current_timestamp(), `modified` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`id`), UNIQUE KEY `ukProfileUserId` (`userId`), CONSTRAINT `fkProfileUser` FOREIGN KEY (`userId`) REFERENCES `user` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `comment` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `userId` int(10) unsigned NOT NULL, `text` text NOT NULL, `created` datetime NOT NULL DEFAULT current_timestamp(), `modified` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`id`), CONSTRAINT `fkCommentUser` FOREIGN KEY (`userId`) REFERENCES `user` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `book` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `userId` int(10) unsigned NOT NULL, `title` text NOT NULL, `created` datetime NOT NULL DEFAULT current_timestamp(), `modified` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`id`), UNIQUE KEY `ukBookTitle` (`userId`, `title`(255)), CONSTRAINT `fkBookUser` FOREIGN KEY (`userId`) REFERENCES `user` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; INSERT INTO `user` (`id`, `email`, `password`, `name`, `icon`) VALUES (1, 'robin@example.com', 'password', 'Robin', '/upload/1.png'), (2, 'taylor@example.com', 'password', 'Taylor', '/upload/2.png'); INSERT INTO `profile` (`userId`, `address`, `tel`) VALUES (1, '777 Brockton Avenue, Abington MA 2351', '202-555-0105'), (2, '30 Memorial Drive, Avon MA 2322', ''); INSERT INTO `comment` (`userId`, `text`) VALUES (1, 'From Robin #1'), (1, 'From Robin #2'), (2, 'From Taylor #1'); INSERT INTO `book` (`userId`, `title`) VALUES (1, 'Beautiful'), (1, 'Lose Yourself'), (2, 'When Im Gone');
- Set the DB connection method in
config/database.js
. For details, please refer to here.export default { development: { username: 'root', password: 'password', database: 'sample_db', host: 'localhost', dialect: 'mariadb' }, test: { username: 'root', password: 'password', database: 'sample_db', host: 'localhost', dialect: 'mariadb' }, production: { username: 'root', password: 'password', database: 'sample_db', host: 'localhost', dialect: 'mariadb' } }
- The DB to be accessed can be defined for each environment. Specify the environment in the
.env
fileNODE_ENV=development
- Run the application with the following command.
npm start
- Then, load
http://localhost:3000/
in your browser to access the app.
The generated app has the following directory structure:. ├── .env ├── app.js ├── ecosystem.config.js ├── nginx.sample.conf ├── package.json ├── bin │ └── www ├── client │ ├── package.json │ ├── webpack.config.js │ └── src ├── config │ ├── authentication.js │ ├── config.js │ ├── database.js │ └── view.js ├── errors │ └── NotFoundError.js ├── middlewares │ └── checkValidationResult.js ├── models │ ├── BookModel.js │ ├── CommentModel.js │ ├── ProfileModel.js │ └── UserModel.js ├── public │ ├── build │ └── upload ├── routes │ ├── login.js │ ├── profile.js │ ├── users.js │ └── api │ ├── profile.js │ └── users.js ├── shared │ └── isEmpty.js ├── validators │ └── isValidImageDataUrl.js └── views ├── error.hbs ├── login.hbs ├── layout │ └── default.hbs ├── partials │ └── .gitkeep ├── users │ └── index.hbs ├── profile │ ├── show.hbs │ └── edit.hbs └── errors ├── 404.hbs └── 500.hbs
Takuya Motoshima