From 8a6e23577cde973a69a60a57477e1ba014cf658d Mon Sep 17 00:00:00 2001 From: huangge1199 Date: Mon, 5 Aug 2024 16:31:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc | 3 + .gitignore | 37 +++++++++++ README.md | 22 +++++++ development.js | 18 ++++++ nginx.conf | 30 +++++++++ package.json | 55 ++++++++++++++++ pm2.json | 15 +++++ production.js | 11 ++++ src/bootstrap/master.js | 1 + src/bootstrap/worker.js | 1 + src/config/adapter.js | 109 ++++++++++++++++++++++++++++++++ src/config/config.js | 4 ++ src/config/config.production.js | 4 ++ src/config/extend.js | 11 ++++ src/config/middleware.js | 40 ++++++++++++ src/config/router.js | 3 + src/controller/base.js | 5 ++ src/controller/index.js | 7 ++ src/logic/index.js | 5 ++ src/model/index.js | 3 + test/index.js | 7 ++ view/index_index.html | 48 ++++++++++++++ www/static/css/.gitkeep | 0 www/static/image/.gitkeep | 0 www/static/js/.gitkeep | 0 25 files changed, 439 insertions(+) create mode 100644 .eslintrc create mode 100644 .gitignore create mode 100644 README.md create mode 100644 development.js create mode 100644 nginx.conf create mode 100644 package.json create mode 100644 pm2.json create mode 100644 production.js create mode 100644 src/bootstrap/master.js create mode 100644 src/bootstrap/worker.js create mode 100644 src/config/adapter.js create mode 100644 src/config/config.js create mode 100644 src/config/config.production.js create mode 100644 src/config/extend.js create mode 100644 src/config/middleware.js create mode 100644 src/config/router.js create mode 100644 src/controller/base.js create mode 100644 src/controller/index.js create mode 100644 src/logic/index.js create mode 100644 src/model/index.js create mode 100644 test/index.js create mode 100644 view/index_index.html create mode 100644 www/static/css/.gitkeep create mode 100644 www/static/image/.gitkeep create mode 100644 www/static/js/.gitkeep diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..3b1360e --- /dev/null +++ b/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": "think" +} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bb446e2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage/ + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Dependency directory +# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git +node_modules/ + +# IDE config +.idea + +# output +output/ +output.tar.gz + +runtime/ +app/ + +config.development.js +adapter.development.js diff --git a/README.md b/README.md new file mode 100644 index 0000000..ee90448 --- /dev/null +++ b/README.md @@ -0,0 +1,22 @@ + +Application created by [ThinkJS](http://www.thinkjs.org) + +## Install dependencies + +``` +npm install +``` + +## Start server + +``` +npm start +``` + +## Deploy with pm2 + +Use pm2 to deploy app on production enviroment. + +``` +pm2 startOrReload pm2.json +``` \ No newline at end of file diff --git a/development.js b/development.js new file mode 100644 index 0000000..df0046c --- /dev/null +++ b/development.js @@ -0,0 +1,18 @@ +const path = require('path'); +const Application = require('thinkjs'); +const watcher = require('think-watcher'); +const babel = require('think-babel'); +const notifier = require('node-notifier'); + +const instance = new Application({ + ROOT_PATH: __dirname, + APP_PATH: path.join(__dirname, 'app'), + watcher: watcher, + transpiler: [babel, { + presets: ['think-node'] + }], + notifier: notifier.notify.bind(notifier), + env: 'development' +}); + +instance.run(); diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..22f3709 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,30 @@ +server { + listen 80; + server_name example.com www.example.com; + root D:\project\node-server\news-server; + set $node_port 8360; + + index index.js index.html index.htm; + if ( -f $request_filename/index.html ){ + rewrite (.*) $1/index.html break; + } + if ( !-f $request_filename ){ + rewrite (.*) /index.js; + } + location = /index.js { + proxy_http_version 1.1; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_set_header X-NginX-Proxy true; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_pass http://127.0.0.1:$node_port$request_uri; + proxy_redirect off; + } + + location ~ /static/ { + etag on; + expires max; + } +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..684ae8b --- /dev/null +++ b/package.json @@ -0,0 +1,55 @@ +{ + "name": "news-server", + "description": "application created by thinkjs", + "version": "1.0.0", + "author": "huangge1199 ", + "scripts": { + "start": "node development.js", + "test": "THINK_UNIT_TEST=1 nyc ava test/ && nyc report --reporter=html", + "compile": "babel --no-babelrc src/ --presets think-node --out-dir app/", + "lint": "eslint src/", + "lint-fix": "eslint --fix src/" + }, + "dependencies": { + "think-cache": "^1.0.0", + "think-session": "^1.0.0", + "think-cache-file": "^1.0.8", + "think-model": "^1.0.0", + "think-session-file": "^1.0.5", + "think-view": "^1.0.0", + "think-view-nunjucks": "^1.0.1", + "think-model-mysql": "^1.0.0", + "think-logger3": "^1.0.0", + "thinkjs": "^3.0.0" + }, + "devDependencies": { + "babel-cli": "^6.24.1", + "babel-preset-think-node": "^1.0.0", + "node-notifier": "^5.0.2", + "think-inspect": "0.0.2", + "think-babel": "^1.0.3", + "think-watcher": "^3.0.0", + "eslint": "^4.2.0", + "eslint-config-think": "^1.0.0", + "ava": "^0.18.0", + "nyc": "^7.0.0" + }, + "repository": "", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + }, + "readmeFilename": "README.md", + "thinkjs": { + "metadata": { + "name": "news-server", + "description": "application created by thinkjs", + "author": "huangge1199 ", + "babel": true + }, + "projectName": "news-server", + "template": "D:\\Program Files\\nodejs\\node_global\\node_modules\\think-cli\\default_template", + "clone": false, + "isMultiModule": false + } +} \ No newline at end of file diff --git a/pm2.json b/pm2.json new file mode 100644 index 0000000..721031e --- /dev/null +++ b/pm2.json @@ -0,0 +1,15 @@ +{ + "apps": [{ + "name": "news-server", + "script": "production.js", + "cwd": "D:\project\node-server\news-server", + "exec_mode": "fork", + "max_memory_restart": "1G", + "autorestart": true, + "node_args": [], + "args": [], + "env": { + + } + }] +} diff --git a/production.js b/production.js new file mode 100644 index 0000000..f5756f8 --- /dev/null +++ b/production.js @@ -0,0 +1,11 @@ +const path = require('path'); +const Application = require('thinkjs'); + +const instance = new Application({ + ROOT_PATH: __dirname, + APP_PATH: path.join(__dirname, 'app'), + proxy: true, // use proxy + env: 'production' +}); + +instance.run(); diff --git a/src/bootstrap/master.js b/src/bootstrap/master.js new file mode 100644 index 0000000..f59eb6d --- /dev/null +++ b/src/bootstrap/master.js @@ -0,0 +1 @@ +// invoked in master diff --git a/src/bootstrap/worker.js b/src/bootstrap/worker.js new file mode 100644 index 0000000..b53b75d --- /dev/null +++ b/src/bootstrap/worker.js @@ -0,0 +1 @@ +// invoked in worker diff --git a/src/config/adapter.js b/src/config/adapter.js new file mode 100644 index 0000000..9e1d315 --- /dev/null +++ b/src/config/adapter.js @@ -0,0 +1,109 @@ +const fileCache = require('think-cache-file'); +const nunjucks = require('think-view-nunjucks'); +const fileSession = require('think-session-file'); +const mysql = require('think-model-mysql'); +const {Console, File, DateFile} = require('think-logger3'); +const path = require('path'); +const isDev = think.env === 'development'; + +/** + * cache adapter config + * @type {Object} + */ +exports.cache = { + type: 'file', + common: { + timeout: 24 * 60 * 60 * 1000 // millisecond + }, + file: { + handle: fileCache, + cachePath: path.join(think.ROOT_PATH, 'runtime/cache'), // absoulte path is necessarily required + pathDepth: 1, + gcInterval: 24 * 60 * 60 * 1000 // gc interval + } +}; + +/** + * model adapter config + * @type {Object} + */ +exports.model = { + type: 'mysql', + common: { + logConnect: isDev, + logSql: isDev, + logger: msg => think.logger.info(msg) + }, + mysql: { + handle: mysql, + database: '', + prefix: '', + encoding: 'utf8', + host: '', + port: '', + user: '', + password: '', + dateStrings: true + } +}; + +/** + * session adapter config + * @type {Object} + */ +exports.session = { + type: 'file', + common: { + cookie: { + name: 'thinkjs' + // keys: ['werwer', 'werwer'], + // signed: true + } + }, + file: { + handle: fileSession, + sessionPath: path.join(think.ROOT_PATH, 'runtime/session') + } +}; + +/** + * view adapter config + * @type {Object} + */ +exports.view = { + type: 'nunjucks', + common: { + viewPath: path.join(think.ROOT_PATH, 'view'), + sep: '_', + extname: '.html' + }, + nunjucks: { + handle: nunjucks + } +}; + +/** + * logger adapter config + * @type {Object} + */ +exports.logger = { + type: isDev ? 'console' : 'dateFile', + console: { + handle: Console + }, + file: { + handle: File, + backups: 10, // max chunk number + absolute: true, + maxLogSize: 50 * 1024, // 50M + filename: path.join(think.ROOT_PATH, 'logs/app.log') + }, + dateFile: { + handle: DateFile, + level: 'ALL', + absolute: true, + pattern: '-yyyy-MM-dd', + alwaysIncludePattern: true, + filename: path.join(think.ROOT_PATH, 'logs/app.log') + } +}; diff --git a/src/config/config.js b/src/config/config.js new file mode 100644 index 0000000..628768a --- /dev/null +++ b/src/config/config.js @@ -0,0 +1,4 @@ +// default config +module.exports = { + workers: 1 +}; diff --git a/src/config/config.production.js b/src/config/config.production.js new file mode 100644 index 0000000..eaa19e2 --- /dev/null +++ b/src/config/config.production.js @@ -0,0 +1,4 @@ +// production config, it will load in production enviroment +module.exports = { + workers: 0 +}; diff --git a/src/config/extend.js b/src/config/extend.js new file mode 100644 index 0000000..5c62a62 --- /dev/null +++ b/src/config/extend.js @@ -0,0 +1,11 @@ +const view = require('think-view'); +const model = require('think-model'); +const cache = require('think-cache'); +const session = require('think-session'); + +module.exports = [ + view, // make application support view + model(think.app), + cache, + session +]; diff --git a/src/config/middleware.js b/src/config/middleware.js new file mode 100644 index 0000000..69953b8 --- /dev/null +++ b/src/config/middleware.js @@ -0,0 +1,40 @@ +const path = require('path'); +const isDev = think.env === 'development'; + +module.exports = [ + { + handle: 'meta', + options: { + logRequest: isDev, + sendResponseTime: isDev + } + }, + { + handle: 'resource', + enable: isDev, + options: { + root: path.join(think.ROOT_PATH, 'www'), + publicPath: /^\/(static|favicon\.ico)/ + } + }, + { + handle: 'trace', + enable: !think.isCli, + options: { + debug: isDev + } + }, + { + handle: 'payload', + options: { + keepExtensions: true, + limit: '5mb' + } + }, + { + handle: 'router', + options: {} + }, + 'logic', + 'controller' +]; diff --git a/src/config/router.js b/src/config/router.js new file mode 100644 index 0000000..fb46b68 --- /dev/null +++ b/src/config/router.js @@ -0,0 +1,3 @@ +module.exports = [ + +]; diff --git a/src/controller/base.js b/src/controller/base.js new file mode 100644 index 0000000..021ae73 --- /dev/null +++ b/src/controller/base.js @@ -0,0 +1,5 @@ +module.exports = class extends think.Controller { + __before() { + + } +}; diff --git a/src/controller/index.js b/src/controller/index.js new file mode 100644 index 0000000..530193a --- /dev/null +++ b/src/controller/index.js @@ -0,0 +1,7 @@ +const Base = require('./base.js'); + +module.exports = class extends Base { + indexAction() { + return this.display(); + } +}; diff --git a/src/logic/index.js b/src/logic/index.js new file mode 100644 index 0000000..54c1cc2 --- /dev/null +++ b/src/logic/index.js @@ -0,0 +1,5 @@ +module.exports = class extends think.Logic { + indexAction() { + + } +}; diff --git a/src/model/index.js b/src/model/index.js new file mode 100644 index 0000000..cab52cf --- /dev/null +++ b/src/model/index.js @@ -0,0 +1,3 @@ +module.exports = class extends think.Model { + +}; diff --git a/test/index.js b/test/index.js new file mode 100644 index 0000000..6d6f39f --- /dev/null +++ b/test/index.js @@ -0,0 +1,7 @@ +const test = require('ava'); +const path = require('path'); +require(path.join(process.cwd(), 'production.js')); + +test('first test', t => { + const indexModel = think.model('index'); +}) diff --git a/view/index_index.html b/view/index_index.html new file mode 100644 index 0000000..90267a9 --- /dev/null +++ b/view/index_index.html @@ -0,0 +1,48 @@ + + + + +New ThinkJS Application + + + +
+
+

A New App Created By ThinkJS

+
+
+
+
+
+
1
+

Generate Files

+

Run thinkjs command to create module, controler, model, service and so on.

+
+
+
2
+

Documentation

+

ThinkJS has online html documents. visit https://thinkjs.org/doc.html.

+
+
+
3
+

GitHub

+

If you have some questions, please new a issue.

+
+
+
+ + diff --git a/www/static/css/.gitkeep b/www/static/css/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/www/static/image/.gitkeep b/www/static/image/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/www/static/js/.gitkeep b/www/static/js/.gitkeep new file mode 100644 index 0000000..e69de29