🎨 Many minor improvement (#28)

dependabot/npm_and_yarn/mixin-deep-1.3.2
王子亭 7 years ago committed by Lee Yeh
parent 5e2c94143b
commit 518d183fdc
  1. 3
      .jshintrc
  2. 36
      README.md
  3. 19
      app.js
  4. 2
      cloud.js
  5. 16
      package.json
  6. 2
      routes/todos.js
  7. 6
      server-cluster.js
  8. 5
      server.js

@ -1,3 +0,0 @@
{
"node": true
}

@ -1,17 +1,15 @@
# Node.js Getting started # Node.js Getting started
在 LeanCloud 云引擎上使用 Express 的 Node.js 实例项目。
一个简单的使用 Express 4 的 Node.js 应用。
可以运行在 LeanEngine 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 $ cd node-js-getting-started
``` ```
@ -21,21 +19,20 @@ $ cd node-js-getting-started
npm install npm install
``` ```
关联应用: 登录并关联应用:
``` ```
lean app add origin <appId> lean login
lean checkout
``` ```
这里的 appId 填上你在 LeanCloud 上创建的某一应用的 appId 即可。origin 则有点像 Git 里的 remote 名称。
启动项目: 启动项目:
``` ```
lean up lean up
``` ```
应用即可启动运行:[localhost:3000](http://localhost:3000) 之后你就可以在 [localhost:3000](http://localhost:3000) 访问到你的应用了。
## 部署到 LeanEngine ## 部署到 LeanEngine
@ -44,15 +41,12 @@ lean up
lean deploy lean deploy
``` ```
将预备环境的代码发布到生产环境:
```
lean publish
```
## 相关文档 ## 相关文档
* [LeanEngine 指南](https://leancloud.cn/docs/leanengine_guide-node.html) * [云函数开发指南](https://leancloud.cn/docs/leanengine_cloudfunction_guide-node.html)
* [JavaScript 指南](https://leancloud.cn/docs/js_guide.html) * [网站托管开发指南](https://leancloud.cn/docs/leanengine_webhosting_guide-node.html)
* [JavaScript SDK API](https://leancloud.cn/api-docs/javascript/index.html) * [JavaScript 开发指南](https://leancloud.cn/docs/leanstorage_guide-js.html)
* [命令行工具详解](https://leancloud.cn/docs/cloud_code_commandline.html) * [JavaScript SDK API](https://leancloud.github.io/javascript-sdk/docs/)
* [LeanEngine FAQ](https://leancloud.cn/docs/cloud_code_faq.html) * [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)

@ -4,24 +4,29 @@ var timeout = require('connect-timeout');
var path = require('path'); var path = require('path');
var cookieParser = require('cookie-parser'); var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser'); var bodyParser = require('body-parser');
var todos = require('./routes/todos');
var AV = require('leanengine'); var AV = require('leanengine');
// 加载云函数定义,你可以将云函数拆分到多个文件方便管理,但需要在主文件中加载它们
require('./cloud');
var app = express(); var app = express();
// 设置模板引擎 // 设置模板引擎
app.set('views', path.join(__dirname, 'views')); app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs'); app.set('view engine', 'ejs');
app.use(express.static('public')); app.use(express.static('public'));
// 设置默认超时时间 // 设置默认超时时间
app.use(timeout('15s')); app.use(timeout('15s'));
// 加载云函数定义
require('./cloud');
// 加载云引擎中间件 // 加载云引擎中间件
app.use(AV.express()); app.use(AV.express());
app.enable('trust proxy');
// 需要重定向到 HTTPS 可去除下一行的注释。
// app.use(AV.Cloud.HttpsRedirect());
app.use(bodyParser.json()); app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser()); 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) { app.use(function(req, res, next) {
// 如果任何一个路由都没有返回响应,则抛出一个 404 异常给后续的异常处理器 // 如果任何一个路由都没有返回响应,则抛出一个 404 异常给后续的异常处理器
@ -43,17 +48,17 @@ app.use(function(req, res, next) {
}); });
// error handlers // 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') { if (req.timedout && req.headers.upgrade === 'websocket') {
// 忽略 websocket 的超时 // 忽略 websocket 的超时
return; return;
} }
var statusCode = err.status || 500; var statusCode = err.status || 500;
if(statusCode === 500) { if (statusCode === 500) {
console.error(err.stack || err); console.error(err.stack || err);
} }
if(req.timedout) { if (req.timedout) {
console.error('请求超时: url=%s, timeout=%d, 请确认方法执行耗时很长,或没有正确的 response 回调。', req.originalUrl, err.timeout); console.error('请求超时: url=%s, timeout=%d, 请确认方法执行耗时很长,或没有正确的 response 回调。', req.originalUrl, err.timeout);
} }
res.status(statusCode); res.status(statusCode);

@ -6,5 +6,3 @@ var AV = require('leanengine');
AV.Cloud.define('hello', function(request, response) { AV.Cloud.define('hello', function(request, response) {
response.success('Hello world!'); response.success('Hello world!');
}); });
module.exports = AV.Cloud;

@ -1,31 +1,25 @@
{ {
"name": "node-js-getting-started", "name": "node-js-getting-started",
"version": "1.0.0", "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", "main": "server.js",
"scripts": { "scripts": {
"start": "node server.js", "start": "node server.js",
"dev": "./node_modules/.bin/nodemon server.js" "dev": "nodemon server.js"
}, },
"keywords": [
"node",
"LeanCloud",
"LeanEngine",
"express"
],
"license": "MIT",
"dependencies": { "dependencies": {
"body-parser": "1.12.3", "body-parser": "1.12.3",
"connect-timeout": "^1.7.0", "connect-timeout": "^1.7.0",
"cookie-parser": "^1.3.5", "cookie-parser": "^1.3.5",
"ejs": "2.3.1", "ejs": "2.3.1",
"express": "4.12.3", "express": "4.12.3",
"leanengine": "^1.0.0-beta" "leanengine": "^1.2.3"
}, },
"devDependencies": { "devDependencies": {
"nodemon": "^1.11.0" "nodemon": "^1.11.0"
}, },
"engines": { "engines": {
"node": "4.x" "node": "6.x"
} }
} }

@ -2,8 +2,6 @@
var router = require('express').Router(); var router = require('express').Router();
var AV = require('leanengine'); var AV = require('leanengine');
// `AV.Object.extend` 方法一定要放在全局变量,否则会造成堆栈溢出。
// 详见: https://leancloud.cn/docs/js_guide.html#对象
var Todo = AV.Object.extend('Todo'); var Todo = AV.Object.extend('Todo');
// 查询 Todo 列表 // 查询 Todo 列表

@ -1,7 +1,7 @@
var cluster = require('cluster'); var cluster = require('cluster');
// 取决于你的实例的可用 CPU 数量 // 进程数量建议设置为可用的 CPU 数量
var workers = 2; var workers = process.env.LEANCLOUD_AVAILABLE_CPUS || 1;
if (cluster.isMaster) { if (cluster.isMaster) {
for (var i = 0; i < workers; i++) { for (var i = 0; i < workers; i++) {
@ -13,5 +13,5 @@ if (cluster.isMaster) {
cluster.fork(); cluster.fork();
}); });
} else { } else {
require('./server.js') require('./server.js');
} }

@ -15,8 +15,9 @@ var app = require('./app');
// 端口一定要从环境变量 `LEANCLOUD_APP_PORT` 中获取。 // 端口一定要从环境变量 `LEANCLOUD_APP_PORT` 中获取。
// LeanEngine 运行时会分配端口并赋值到该变量。 // LeanEngine 运行时会分配端口并赋值到该变量。
var PORT = parseInt(process.env.LEANCLOUD_APP_PORT || process.env.PORT || 3000); 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) { process.on('uncaughtException', function(err) {

Loading…
Cancel
Save