commit 8a6e23577cde973a69a60a57477e1ba014cf658d Author: huangge1199 Date: Mon Aug 5 16:31:22 2024 +0800 初始化项目 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