From 518d183fdc0956e04c7b57d5c08062fef2e87e73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=AD=90=E4=BA=AD?= Date: Tue, 24 Jan 2017 11:48:52 +0800 Subject: [PATCH] :art: Many minor improvement (#28) --- .jshintrc | 3 --- README.md | 36 +++++++++++++++--------------------- app.js | 19 ++++++++++++------- cloud.js | 2 -- package.json | 16 +++++----------- routes/todos.js | 2 -- server-cluster.js | 6 +++--- server.js | 5 +++-- 8 files changed, 38 insertions(+), 51 deletions(-) delete mode 100644 .jshintrc diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index c1f2978..0000000 --- a/.jshintrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "node": true -} diff --git a/README.md b/README.md index 83d7fd3..c750414 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,15 @@ # Node.js Getting started - -一个简单的使用 Express 4 的 Node.js 应用。 -可以运行在 LeanEngine Node.js 运行时环境。 +在 LeanCloud 云引擎上使用 Express 的 Node.js 实例项目。 ## 一键部署 -[![Deploy to LeanEngine](http://ac-32vx10b9.clouddn.com/109bd02ee9f5875a.png)](https://leancloud.cn/1.1/functions/_ops/deploy-button) +[![Deploy to LeanEngine](http://ac-32vx10b9.clouddn.com/109bd02ee9f5875a.png)](https://leancloud.cn/1.1/engine/deploy-button) ## 本地运行 -首先确认本机已经安装 [Node.js](http://nodejs.org/) 运行环境和 [LeanCloud 命令行工具](https://www.leancloud.cn/docs/leanengine_cli.html),然后执行下列指令: +首先确认本机已经安装 [Node.js](http://nodejs.org/) 运行环境和 [LeanCloud 命令行工具](https://leancloud.cn/docs/leanengine_cli.html),然后执行下列指令: ``` -$ git clone git@github.com:leancloud/node-js-getting-started.git +$ git clone https://github.com/leancloud/node-js-getting-started.git $ cd node-js-getting-started ``` @@ -21,21 +19,20 @@ $ cd node-js-getting-started npm install ``` -关联应用: +登录并关联应用: ``` -lean app add origin +lean login +lean checkout ``` -这里的 appId 填上你在 LeanCloud 上创建的某一应用的 appId 即可。origin 则有点像 Git 里的 remote 名称。 - 启动项目: ``` lean up ``` -应用即可启动运行:[localhost:3000](http://localhost:3000) +之后你就可以在 [localhost:3000](http://localhost:3000) 访问到你的应用了。 ## 部署到 LeanEngine @@ -44,15 +41,12 @@ lean up lean deploy ``` -将预备环境的代码发布到生产环境: -``` -lean publish -``` - ## 相关文档 -* [LeanEngine 指南](https://leancloud.cn/docs/leanengine_guide-node.html) -* [JavaScript 指南](https://leancloud.cn/docs/js_guide.html) -* [JavaScript SDK API](https://leancloud.cn/api-docs/javascript/index.html) -* [命令行工具详解](https://leancloud.cn/docs/cloud_code_commandline.html) -* [LeanEngine FAQ](https://leancloud.cn/docs/cloud_code_faq.html) +* [云函数开发指南](https://leancloud.cn/docs/leanengine_cloudfunction_guide-node.html) +* [网站托管开发指南](https://leancloud.cn/docs/leanengine_webhosting_guide-node.html) +* [JavaScript 开发指南](https://leancloud.cn/docs/leanstorage_guide-js.html) +* [JavaScript SDK API](https://leancloud.github.io/javascript-sdk/docs/) +* [Node.js SDK API](https://github.com/leancloud/leanengine-node-sdk/blob/master/API.md) +* [命令行工具使用指南](https://leancloud.cn/docs/cloud_code_commandline.html) +* [云引擎常见问题和解答](https://leancloud.cn/docs/leanengine_faq.html) diff --git a/app.js b/app.js index 1f0aecf..cf52446 100644 --- a/app.js +++ b/app.js @@ -4,24 +4,29 @@ var timeout = require('connect-timeout'); var path = require('path'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); -var todos = require('./routes/todos'); var AV = require('leanengine'); +// 加载云函数定义,你可以将云函数拆分到多个文件方便管理,但需要在主文件中加载它们 +require('./cloud'); + var app = express(); // 设置模板引擎 app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); + app.use(express.static('public')); // 设置默认超时时间 app.use(timeout('15s')); -// 加载云函数定义 -require('./cloud'); // 加载云引擎中间件 app.use(AV.express()); +app.enable('trust proxy'); +// 需要重定向到 HTTPS 可去除下一行的注释。 +// app.use(AV.Cloud.HttpsRedirect()); + app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); @@ -31,7 +36,7 @@ app.get('/', function(req, res) { }); // 可以将一类的路由单独保存在一个文件中 -app.use('/todos', todos); +app.use('/todos', require('./routes/todos')); app.use(function(req, res, next) { // 如果任何一个路由都没有返回响应,则抛出一个 404 异常给后续的异常处理器 @@ -43,17 +48,17 @@ app.use(function(req, res, next) { }); // error handlers -app.use(function(err, req, res, next) { // jshint ignore:line +app.use(function(err, req, res, next) { if (req.timedout && req.headers.upgrade === 'websocket') { // 忽略 websocket 的超时 return; } var statusCode = err.status || 500; - if(statusCode === 500) { + if (statusCode === 500) { console.error(err.stack || err); } - if(req.timedout) { + if (req.timedout) { console.error('请求超时: url=%s, timeout=%d, 请确认方法执行耗时很长,或没有正确的 response 回调。', req.originalUrl, err.timeout); } res.status(statusCode); diff --git a/cloud.js b/cloud.js index 2875a98..ad46cdb 100644 --- a/cloud.js +++ b/cloud.js @@ -6,5 +6,3 @@ var AV = require('leanengine'); AV.Cloud.define('hello', function(request, response) { response.success('Hello world!'); }); - -module.exports = AV.Cloud; diff --git a/package.json b/package.json index d59336b..44169dd 100644 --- a/package.json +++ b/package.json @@ -1,31 +1,25 @@ { "name": "node-js-getting-started", "version": "1.0.0", - "description": "A sample Node.js app using Express 4", + "private": true, + "description": "A sample Node.js app using Express", "main": "server.js", "scripts": { "start": "node server.js", - "dev": "./node_modules/.bin/nodemon server.js" + "dev": "nodemon server.js" }, - "keywords": [ - "node", - "LeanCloud", - "LeanEngine", - "express" - ], - "license": "MIT", "dependencies": { "body-parser": "1.12.3", "connect-timeout": "^1.7.0", "cookie-parser": "^1.3.5", "ejs": "2.3.1", "express": "4.12.3", - "leanengine": "^1.0.0-beta" + "leanengine": "^1.2.3" }, "devDependencies": { "nodemon": "^1.11.0" }, "engines": { - "node": "4.x" + "node": "6.x" } } diff --git a/routes/todos.js b/routes/todos.js index 19e55cf..dc3486f 100644 --- a/routes/todos.js +++ b/routes/todos.js @@ -2,8 +2,6 @@ var router = require('express').Router(); var AV = require('leanengine'); -// `AV.Object.extend` 方法一定要放在全局变量,否则会造成堆栈溢出。 -// 详见: https://leancloud.cn/docs/js_guide.html#对象 var Todo = AV.Object.extend('Todo'); // 查询 Todo 列表 diff --git a/server-cluster.js b/server-cluster.js index 871f24d..779249f 100644 --- a/server-cluster.js +++ b/server-cluster.js @@ -1,7 +1,7 @@ var cluster = require('cluster'); -// 取决于你的实例的可用 CPU 数量 -var workers = 2; +// 进程数量建议设置为可用的 CPU 数量 +var workers = process.env.LEANCLOUD_AVAILABLE_CPUS || 1; if (cluster.isMaster) { for (var i = 0; i < workers; i++) { @@ -13,5 +13,5 @@ if (cluster.isMaster) { cluster.fork(); }); } else { - require('./server.js') + require('./server.js'); } diff --git a/server.js b/server.js index 8b16da7..6434963 100644 --- a/server.js +++ b/server.js @@ -15,8 +15,9 @@ var app = require('./app'); // 端口一定要从环境变量 `LEANCLOUD_APP_PORT` 中获取。 // LeanEngine 运行时会分配端口并赋值到该变量。 var PORT = parseInt(process.env.LEANCLOUD_APP_PORT || process.env.PORT || 3000); -app.listen(PORT, function () { - console.log('Node app is running, port:', PORT); + +app.listen(PORT, function (err) { + console.log('Node app is running on port:', PORT); // 注册全局未捕获异常处理器 process.on('uncaughtException', function(err) {