@fecommunity/reactpress-server 1.0.0-beta.11 → 1.0.0-beta.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +65 -349
- package/bin/reactpress-server.js +594 -412
- package/dist/tsconfig.build.tsbuildinfo +10 -28
- package/package.json +5 -4
- package/dist/bootstrap.d.ts +0 -10
- package/dist/bootstrap.js +0 -57
- package/dist/bootstrap.js.map +0 -1
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 FECommunity
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,395 +1,111 @@
|
|
|
1
1
|
# @fecommunity/reactpress-server
|
|
2
2
|
|
|
3
|
-
NestJS-based backend API
|
|
4
|
-
|
|
5
|
-
## Installation
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
# For new projects
|
|
9
|
-
npm install @fecommunity/reactpress-server@1.0.0-beta.1 @fecommunity/reactpress-config@1.0.0-beta.1
|
|
10
|
-
|
|
11
|
-
# Using yarn
|
|
12
|
-
yarn add @fecommunity/reactpress-server@1.0.0-beta.1 @fecommunity/reactpress-config@1.0.0-beta.1
|
|
13
|
-
|
|
14
|
-
# Using pnpm in workspace root (add -w flag)
|
|
15
|
-
pnpm add -w @fecommunity/reactpress-server@1.0.0-beta.1 @fecommunity/reactpress-config@1.0.0-beta.1
|
|
16
|
-
|
|
17
|
-
# Using pnpm in standalone project
|
|
18
|
-
pnpm add @fecommunity/reactpress-server@1.0.0-beta.1 @fecommunity/reactpress-config@1.0.0-beta.1
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## Features
|
|
22
|
-
|
|
23
|
-
- 🚀 **NestJS Framework** - Built on modern, scalable Node.js framework
|
|
24
|
-
- 🔐 **Authentication & Authorization** - JWT-based auth with role management
|
|
25
|
-
- 📝 **Content Management** - Full CRUD for articles, categories, tags, and comments
|
|
26
|
-
- 🗃️ **Database Integration** - MySQL support with TypeORM
|
|
27
|
-
- 📁 **File Upload** - Local and cloud storage support (Ali OSS)
|
|
28
|
-
- 🌍 **Internationalization** - Multi-language support
|
|
29
|
-
- 📚 **API Documentation** - Auto-generated Swagger docs
|
|
30
|
-
- 🔒 **Security** - Rate limiting, CORS, Helmet integration
|
|
3
|
+
ReactPress Server - NestJS-based backend API for ReactPress CMS with WordPress-style 5-minute installation.
|
|
31
4
|
|
|
32
5
|
## Quick Start
|
|
33
6
|
|
|
34
|
-
###
|
|
7
|
+
### Installation & Setup
|
|
35
8
|
|
|
36
9
|
```bash
|
|
37
|
-
|
|
38
|
-
npx @fecommunity/reactpress-server init
|
|
39
|
-
|
|
40
|
-
# Or if installed globally
|
|
41
|
-
reactpress-server init
|
|
10
|
+
npx @fecommunity/reactpress-server
|
|
42
11
|
```
|
|
43
12
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
### 2. Start Development Server
|
|
13
|
+
That's it! The command will automatically:
|
|
47
14
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
# Or if installed globally
|
|
53
|
-
reactpress-server dev
|
|
54
|
-
```
|
|
15
|
+
1. **Auto-detect** if configuration exists
|
|
16
|
+
2. **Launch installation wizard** in your browser if no configuration found
|
|
17
|
+
3. **Start the server** immediately after installation
|
|
18
|
+
4. **Open API documentation** at `http://localhost:3002/api`
|
|
55
19
|
|
|
56
|
-
|
|
20
|
+
### Features
|
|
57
21
|
|
|
58
|
-
|
|
22
|
+
- 🚀 **Zero-command installation** - No complex CLI parameters needed
|
|
23
|
+
- 🌍 **WordPress-style setup** - Familiar 5-minute installation process
|
|
24
|
+
- 🔧 **Auto-configuration** - Generates `.env` files automatically
|
|
25
|
+
- 🔌 **Database auto-setup** - Creates MySQL database if it doesn't exist
|
|
26
|
+
- 🎯 **Seamless flow** - From installation to running server in minutes
|
|
27
|
+
- 📖 **Auto-documentation** - Swagger API docs available immediately
|
|
59
28
|
|
|
60
|
-
|
|
61
|
-
# Using npx
|
|
62
|
-
npx @fecommunity/reactpress-server start
|
|
29
|
+
### Requirements
|
|
63
30
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
```
|
|
31
|
+
- Node.js >= 16.5.0
|
|
32
|
+
- MySQL 5.7+ or 8.0+
|
|
67
33
|
|
|
68
|
-
|
|
34
|
+
### Usage Scenarios
|
|
69
35
|
|
|
70
|
-
|
|
36
|
+
#### Standalone API Server
|
|
37
|
+
Perfect for:
|
|
38
|
+
- Headless CMS implementation
|
|
39
|
+
- Mobile app backend
|
|
40
|
+
- Microservices architecture
|
|
41
|
+
- Custom frontend integration
|
|
71
42
|
|
|
72
|
-
|
|
43
|
+
#### Full ReactPress Stack
|
|
44
|
+
Use with ReactPress client for complete CMS solution:
|
|
73
45
|
```bash
|
|
74
|
-
#
|
|
75
|
-
npx @fecommunity/reactpress-server
|
|
76
|
-
|
|
77
|
-
# Or if installed globally
|
|
78
|
-
reactpress-server init [options]
|
|
79
|
-
|
|
80
|
-
Options:
|
|
81
|
-
-p, --port <port> Server port (default: 3002)
|
|
82
|
-
--api-prefix <prefix> API prefix (default: /api)
|
|
83
|
-
--db-host <host> Database host (default: localhost)
|
|
84
|
-
--db-port <port> Database port (default: 3306)
|
|
85
|
-
--db-name <name> Database name (default: reactpress)
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
### Development Mode
|
|
89
|
-
```bash
|
|
90
|
-
# Using npx
|
|
91
|
-
npx @fecommunity/reactpress-server dev [options]
|
|
92
|
-
|
|
93
|
-
# Or if installed globally
|
|
94
|
-
reactpress-server dev [options]
|
|
95
|
-
|
|
96
|
-
Options:
|
|
97
|
-
-p, --port <port> Server port (default: 3002)
|
|
98
|
-
--no-open Don't open browser automatically
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
### Production Mode
|
|
102
|
-
```bash
|
|
103
|
-
# Using npx
|
|
104
|
-
npx @fecommunity/reactpress-server start [options]
|
|
105
|
-
|
|
106
|
-
# Or if installed globally
|
|
107
|
-
reactpress-server start [options]
|
|
108
|
-
|
|
109
|
-
Options:
|
|
110
|
-
-p, --port <port> Server port (default: 3002)
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### Build Project
|
|
114
|
-
```bash
|
|
115
|
-
# Using npx
|
|
116
|
-
npx @fecommunity/reactpress-server build
|
|
46
|
+
# Start server
|
|
47
|
+
npx @fecommunity/reactpress-server
|
|
117
48
|
|
|
118
|
-
#
|
|
119
|
-
reactpress-
|
|
49
|
+
# In another terminal, start client
|
|
50
|
+
npx @fecommunity/reactpress-client
|
|
120
51
|
```
|
|
121
52
|
|
|
122
|
-
|
|
53
|
+
### Configuration
|
|
123
54
|
|
|
124
|
-
|
|
55
|
+
The installation wizard will create a `.env` file with:
|
|
125
56
|
|
|
126
57
|
```env
|
|
127
|
-
|
|
128
|
-
SERVER_PORT=3002
|
|
129
|
-
SERVER_API_PREFIX=/api
|
|
130
|
-
NODE_ENV=development
|
|
131
|
-
|
|
132
|
-
# Database Configuration
|
|
133
|
-
DB_HOST=localhost
|
|
58
|
+
DB_HOST=127.0.0.1
|
|
134
59
|
DB_PORT=3306
|
|
135
|
-
|
|
136
|
-
|
|
60
|
+
DB_USER=your_username
|
|
61
|
+
DB_PASSWD=your_password
|
|
137
62
|
DB_DATABASE=reactpress
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
JWT_SECRET=your_jwt_secret_key
|
|
141
|
-
JWT_EXPIRES_IN=7d
|
|
142
|
-
|
|
143
|
-
# File Upload (Optional - Ali OSS)
|
|
144
|
-
OSS_ACCESS_KEY_ID=your_access_key_id
|
|
145
|
-
OSS_ACCESS_KEY_SECRET=your_access_key_secret
|
|
146
|
-
OSS_BUCKET=your_bucket_name
|
|
147
|
-
OSS_REGION=your_region
|
|
148
|
-
|
|
149
|
-
# Email Configuration (Optional)
|
|
150
|
-
EMAIL_HOST=smtp.gmail.com
|
|
151
|
-
EMAIL_PORT=587
|
|
152
|
-
EMAIL_USER=your_email@gmail.com
|
|
153
|
-
EMAIL_PASS=your_app_password
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
## Programmatic Usage
|
|
157
|
-
|
|
158
|
-
You can also use the server programmatically in your Node.js applications:
|
|
159
|
-
|
|
160
|
-
```typescript
|
|
161
|
-
import { bootstrap } from '@fecommunity/reactpress-server';
|
|
162
|
-
|
|
163
|
-
async function startServer() {
|
|
164
|
-
const app = await bootstrap({
|
|
165
|
-
port: 3002,
|
|
166
|
-
apiPrefix: '/api',
|
|
167
|
-
cors: true
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
console.log('ReactPress server started successfully!');
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
startServer();
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
## API Endpoints
|
|
177
|
-
|
|
178
|
-
The server provides comprehensive REST APIs:
|
|
179
|
-
|
|
180
|
-
### Authentication
|
|
181
|
-
- `POST /api/auth/login` - User login
|
|
182
|
-
- `POST /api/auth/register` - User registration
|
|
183
|
-
- `GET /api/auth/profile` - Get user profile
|
|
184
|
-
|
|
185
|
-
### Articles
|
|
186
|
-
- `GET /api/articles` - Get articles (with pagination)
|
|
187
|
-
- `POST /api/articles` - Create article
|
|
188
|
-
- `GET /api/articles/:id` - Get article by ID
|
|
189
|
-
- `PUT /api/articles/:id` - Update article
|
|
190
|
-
- `DELETE /api/articles/:id` - Delete article
|
|
191
|
-
|
|
192
|
-
### Categories
|
|
193
|
-
- `GET /api/categories` - Get all categories
|
|
194
|
-
- `POST /api/categories` - Create category
|
|
195
|
-
- `PUT /api/categories/:id` - Update category
|
|
196
|
-
- `DELETE /api/categories/:id` - Delete category
|
|
197
|
-
|
|
198
|
-
### Tags
|
|
199
|
-
- `GET /api/tags` - Get all tags
|
|
200
|
-
- `POST /api/tags` - Create tag
|
|
201
|
-
- `PUT /api/tags/:id` - Update tag
|
|
202
|
-
- `DELETE /api/tags/:id` - Delete tag
|
|
203
|
-
|
|
204
|
-
### Comments
|
|
205
|
-
- `GET /api/comments` - Get comments
|
|
206
|
-
- `POST /api/comments` - Create comment
|
|
207
|
-
- `PUT /api/comments/:id` - Update comment
|
|
208
|
-
- `DELETE /api/comments/:id` - Delete comment
|
|
209
|
-
|
|
210
|
-
### File Upload
|
|
211
|
-
- `POST /api/upload/image` - Upload image
|
|
212
|
-
- `POST /api/upload/file` - Upload file
|
|
213
|
-
|
|
214
|
-
## Database Setup
|
|
215
|
-
|
|
216
|
-
### MySQL Installation
|
|
217
|
-
|
|
218
|
-
**Ubuntu/Debian:**
|
|
219
|
-
```bash
|
|
220
|
-
sudo apt update
|
|
221
|
-
sudo apt install mysql-server
|
|
222
|
-
sudo mysql_secure_installation
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
**macOS:**
|
|
226
|
-
```bash
|
|
227
|
-
brew install mysql
|
|
228
|
-
brew services start mysql
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
**Windows:**
|
|
232
|
-
Download and install from [MySQL Official Website](https://dev.mysql.com/downloads/mysql/)
|
|
233
|
-
|
|
234
|
-
### Database Creation
|
|
235
|
-
|
|
236
|
-
```sql
|
|
237
|
-
CREATE DATABASE reactpress;
|
|
238
|
-
CREATE USER 'reactpress'@'localhost' IDENTIFIED BY 'your_password';
|
|
239
|
-
GRANT ALL PRIVILEGES ON reactpress.* TO 'reactpress'@'localhost';
|
|
240
|
-
FLUSH PRIVILEGES;
|
|
63
|
+
CLIENT_SITE_URL=http://localhost:3001
|
|
64
|
+
SERVER_SITE_URL=http://localhost:3002
|
|
241
65
|
```
|
|
242
66
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
### Custom Configuration
|
|
67
|
+
### API Documentation
|
|
246
68
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
69
|
+
Once running, visit `http://localhost:3002/api` for:
|
|
70
|
+
- Interactive Swagger documentation
|
|
71
|
+
- API endpoint explorer
|
|
72
|
+
- Authentication examples
|
|
73
|
+
- Response schemas
|
|
250
74
|
|
|
251
|
-
|
|
252
|
-
const app = await NestFactory.create(AppModule);
|
|
253
|
-
|
|
254
|
-
// Custom middleware
|
|
255
|
-
app.use('/custom', customMiddleware);
|
|
256
|
-
|
|
257
|
-
// Custom global filters
|
|
258
|
-
app.useGlobalFilters(new CustomExceptionFilter());
|
|
259
|
-
|
|
260
|
-
await app.listen(3002);
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
bootstrap();
|
|
264
|
-
```
|
|
265
|
-
|
|
266
|
-
### Plugin Development
|
|
267
|
-
|
|
268
|
-
```typescript
|
|
269
|
-
import { Module } from '@nestjs/common';
|
|
270
|
-
import { PluginInterface } from '@fecommunity/reactpress-server';
|
|
271
|
-
|
|
272
|
-
@Module({
|
|
273
|
-
// Your plugin implementation
|
|
274
|
-
})
|
|
275
|
-
export class CustomPlugin implements PluginInterface {
|
|
276
|
-
install() {
|
|
277
|
-
// Plugin installation logic
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
```
|
|
281
|
-
|
|
282
|
-
## Deployment
|
|
283
|
-
|
|
284
|
-
### PM2 (Recommended)
|
|
75
|
+
### Development
|
|
285
76
|
|
|
286
77
|
```bash
|
|
287
|
-
#
|
|
288
|
-
|
|
78
|
+
# Clone repository
|
|
79
|
+
git clone https://github.com/fecommunity/reactpress.git
|
|
80
|
+
cd reactpress/server
|
|
289
81
|
|
|
290
|
-
#
|
|
291
|
-
npm
|
|
82
|
+
# Install dependencies
|
|
83
|
+
npm install
|
|
292
84
|
|
|
293
|
-
#
|
|
294
|
-
|
|
85
|
+
# Start development server
|
|
86
|
+
npm run dev
|
|
295
87
|
```
|
|
296
88
|
|
|
297
|
-
### Docker
|
|
298
|
-
|
|
299
|
-
```dockerfile
|
|
300
|
-
FROM node:18-alpine
|
|
301
|
-
WORKDIR /app
|
|
302
|
-
COPY package*.json ./
|
|
303
|
-
RUN npm install
|
|
304
|
-
COPY . .
|
|
305
|
-
RUN npm run build
|
|
306
|
-
EXPOSE 3002
|
|
307
|
-
CMD ["npm", "start"]
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
### Docker Compose
|
|
311
|
-
|
|
312
|
-
```yaml
|
|
313
|
-
version: '3.8'
|
|
314
|
-
services:
|
|
315
|
-
reactpress-server:
|
|
316
|
-
build: .
|
|
317
|
-
ports:
|
|
318
|
-
- "3002:3002"
|
|
319
|
-
environment:
|
|
320
|
-
- DB_HOST=mysql
|
|
321
|
-
- DB_USERNAME=root
|
|
322
|
-
- DB_PASSWORD=password
|
|
323
|
-
- DB_DATABASE=reactpress
|
|
324
|
-
depends_on:
|
|
325
|
-
- mysql
|
|
326
|
-
|
|
327
|
-
mysql:
|
|
328
|
-
image: mysql:5.7
|
|
329
|
-
environment:
|
|
330
|
-
- MYSQL_ROOT_PASSWORD=password
|
|
331
|
-
- MYSQL_DATABASE=reactpress
|
|
332
|
-
ports:
|
|
333
|
-
- "3306:3306"
|
|
334
|
-
```
|
|
335
|
-
|
|
336
|
-
## Integration with Frontend
|
|
337
|
-
|
|
338
|
-
Use with ReactPress client:
|
|
89
|
+
### Docker Support
|
|
339
90
|
|
|
340
91
|
```bash
|
|
341
|
-
#
|
|
342
|
-
|
|
92
|
+
# Using Docker
|
|
93
|
+
docker run -p 3002:3002 @fecommunity/reactpress-server
|
|
343
94
|
|
|
344
|
-
#
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
# In another terminal, start client
|
|
348
|
-
npx reactpress-client dev
|
|
349
|
-
```
|
|
350
|
-
|
|
351
|
-
## Troubleshooting
|
|
352
|
-
|
|
353
|
-
### Common Issues
|
|
354
|
-
|
|
355
|
-
1. **Database Connection Error**
|
|
356
|
-
```
|
|
357
|
-
Error: connect ECONNREFUSED 127.0.0.1:3306
|
|
358
|
-
```
|
|
359
|
-
- Ensure MySQL is running
|
|
360
|
-
- Check database credentials in `.env`
|
|
361
|
-
|
|
362
|
-
2. **Port Already in Use**
|
|
363
|
-
```
|
|
364
|
-
Error: listen EADDRINUSE :::3002
|
|
365
|
-
```
|
|
366
|
-
- Change port in `.env` file or use `-p` option
|
|
367
|
-
|
|
368
|
-
3. **JWT Secret Missing**
|
|
369
|
-
```
|
|
370
|
-
Error: JWT_SECRET is not defined
|
|
371
|
-
```
|
|
372
|
-
- Add `JWT_SECRET=your_secret_key` to `.env`
|
|
373
|
-
|
|
374
|
-
### Debug Mode
|
|
375
|
-
|
|
376
|
-
Start server with debug information:
|
|
377
|
-
|
|
378
|
-
```bash
|
|
379
|
-
DEBUG=* npx reactpress-server dev
|
|
95
|
+
# Using docker-compose
|
|
96
|
+
docker-compose up reactpress-server
|
|
380
97
|
```
|
|
381
98
|
|
|
382
|
-
|
|
99
|
+
### Support
|
|
383
100
|
|
|
384
|
-
|
|
101
|
+
- 📖 [Documentation](https://github.com/fecommunity/reactpress)
|
|
102
|
+
- 🐛 [Issues](https://github.com/fecommunity/reactpress/issues)
|
|
103
|
+
- 💬 [Discussions](https://github.com/fecommunity/reactpress/discussions)
|
|
385
104
|
|
|
386
|
-
|
|
105
|
+
### License
|
|
387
106
|
|
|
388
|
-
MIT
|
|
107
|
+
MIT License - see [LICENSE](LICENSE) file for details.
|
|
389
108
|
|
|
390
|
-
|
|
109
|
+
---
|
|
391
110
|
|
|
392
|
-
|
|
393
|
-
- [Documentation](https://reactpress.surge.sh)
|
|
394
|
-
- [npm Package](https://www.npmjs.com/package/@fecommunity/reactpress-server)
|
|
395
|
-
- [API Documentation](http://localhost:3002/api) (when server is running)
|
|
111
|
+
Built with ❤️ by [FECommunity](https://github.com/fecommunity)
|