261 回复

点赞!正好要学习一下测试方面的东西

讲的挺全 自豪地采用 CNodeJS ionic

棒棒哒,精华

不得不说,这波满分

顶。。。。

重写的主要内容是啥

必须精华啊~ 启蒙老师 杠杠的

6的不要不要的

马克

来自酷炫的 CNodeMD

同上,今天上线一看全更新了。 楼主能把原版的N-Blog的wiki发我一份吗? 万分感谢!!

学习一下。。。。。

mark,非常感谢分享精神

@EvanXzj 原版的不建议看了,在 backup 分支

非常不错,支持

厉害了,支持~

想听听大神如何评价koa,以及koa vs express?如果不是专职后端,或者说后端经验没那么丰富的前端,想做个自己的项目推荐用哪个呢?之前有用过express+Sequelize做过一个小demo,没啥感觉。。。

@artisan 如果我自己写项目的话必选koa,express和koa本身都不难,都学学也无妨

大神很喜欢你,买了你的书,项目太简单了,下次能不能出难一点的。我的QQ2585441871 出书了丢我连接。

建议开通打赏功能

必须要赞一下

你出的书在哪呢,给个链接呗,买过来学习一下~

楼主一定是好人。

楼主好人,一生平安,66666666666

666,顶顶顶,感谢大神,楼主好人,我们爱你

谢谢楼主!我基础比较差,想先了解下之前的然后再来学习这个。

感谢楼主,Mark

@nswbmw 大大,我照着你的例子出了个错误,我自己解决不了,能否帮我看一下。我发在https://segmentfault.com/q/1010000007419827

mark回去学习

受益匪浅,谢谢分享

点赞,也是我药学的

真是 浅显易懂啊,学到很多 谢谢大神!!!! 感谢!!!!

最近开始准备学习了。一直在配环境。 homebrew一直装不上。

楼主,QQ截图20161110102516.png,我到这一步后,显示NODE-ENV不是内部或外部命令,是不是NODE-ENV不支持win7?看您用的mac

@haocaokai ## cross-env

cross-env NODE_ENV=production<br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>

关于 nvm 和 n 那一小节,除了文中提及的那篇博客博客,我个人还比较喜欢简单谈谈node.js 版本控制 nvm和 n中的一段说明:

nvm 类似于 Python 的 virtualenv 或者 Ruby 的 rvm ,它是一个独立安装的软件 n 其实是一个 npm 全局的开源包 ,需要使用 npm 来全局安装 n 更加轻巧,但是 nvm 更加独立. 假如你有一台新带电脑,如果你想使用 版本管理,那么 nvm 是你的选择,因为它的独立的软件,安装后你可以随意下载切换你需要的版本. 但是 n 是依赖在 npm 下的一个包,也就是说 你的电脑环境还没有 node / npm 的时候,你还用不了 n .

@AserSayHi 欢迎 pr,教程就是需要大家一起完善

不错,学习学习

@Zaynex 代码里有二维码 你可以去打赏 哈哈

@nswbmw 上午的时候pr了4个空格,竟然还给过了,感觉自己好不要脸的蹭了个车- -

赞,koa 论坛的那个刷过一遍了,有时间刷下这个

@wxh2013 测试完了麻烦删下这些测试的留言吧,刷屏了 :)

@nswbmw 不好意思, 忘了。 文章写的很棒, 前几天照着学了一遍

Semantic-UI的谷歌字体需要翻墙。。。

打心底感谢您 !

来自酷炫的 CNodeMD

学习了!!!!

学习一波!!! 使用antd-moblie[cnode]版

@yuu2lee4 试试替换成国内的字体库,比如 fonts.css.network

@AserSayHi 我倒是没关系 我这边能翻墙 那些新手说不定就蒙逼了

收藏,棒棒的

完全懂后台,不懂前端的嵌入式人员。照着做了一边。。很多代码看不懂,,,怎么办。。

mark,对于新手来说,是个非常好的学习资源,感谢楼主

写到routes/posts.js这块了,然后报错了。不知道怎么解决了 $ node app.js D:\part\node_modules\mongolass\lib\query.js:53 this[plugin.name] = (…args) => { ^^^

SyntaxError: Unexpected token … at exports.runInThisContext (vm.js:53:16) at Module._compile (module.js:373:25) at Object.Module._extensions…js (module.js:416:10) at Module.load (module.js:343:32) at Function.Module._load (module.js:300:12) at Module.require (module.js:353:17) at require (internal/module.js:12:17) at Object.<anonymous> (D:\part\node_modules\mongolass\lib\model.js:7:15) at Module._compile (module.js:409:26) at Object.Module._extensions…js (module.js:416:10) at Module.load (module.js:343:32) at Function.Module._load (module.js:300:12) at Module.require (module.js:353:17) at require (internal/module.js:12:17) at Object.<anonymous> (D:\part\node_modules\mongolass\lib\index.js:7:15) at Module._compile (module.js:409:26) 这个mongolass模块和哪里错误了,修改了以后还是报红色的警告

差不多看完了,覺得大神寫的mongolass很好用啊~~ 就是文檔上面感覺還不太詳細。。要是能完善一下mongolass的文檔就好了

@nswbmw 大神,小白有点不懂,取post数据我看都是req.body,但是我看到你里面是req.fields,这个是啥意思,PS没百度到

@ZuChat 升下 node 版本

@maoxiaoquan 看 koa-formidable 的文档啊~,一般的 bodyparser 中间件都会挂在 req.body 上,上传文件的挂在 req.files 和 req.fields。

@StudentWan 就那几个核心概念和用法。。文档参考 mongodb。。虽然文档(就是readme)比较粗略,但不知道还要写啥。。

@nswbmw 可能是因為我是小白,囧。我回復完也想到了~明天再去看mongodb的文檔~~

新手请问下,如果想做成前后台分离的模式,登陆时后台传给前台一个accessToken保存在cookie中,调用后台接口时根据token判断用户是否登录。具体实现逻辑是什么?比如用什么生成token,以及怎么匹配token?

@qichangjun 去了解下 jwt,node 常用 jwtwebtoken

@nswbmw 请问 config-lite 为什么找不到 config/default 呢? 执行进程目录没问题, NODE_ENV = undefined

错误信息:

config-lite load `default` failed
Error: Cannot find module 'default' from '/Users/olafcheng/Programs/Note'
    at Function.module.exports [as sync] (/Users/olafcheng/Programs/Note/node/code/c5/myblog/node_modules/resolve/lib/sync.js:33:11)
    at loadConfig (/Users/olafcheng/Programs/Note/node/code/c5/myblog/node_modules/config-lite/index.js:32:26)
    at Object.<anonymous> (/Users/olafcheng/Programs/Note/node/code/c5/myblog/node_modules/config-lite/index.js:18:20)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
config-lite load `default` failed
Error: Cannot find module 'default' from '/Users/olafcheng/Programs/Note'

输出 process.cwd() :

console.log("Process path is: " + process.cwd());
// Process path is: /Users/olafcheng/Programs/Note/node/code/c5/myblog

输出 process.env.NODE_ENV :

console.log("process.env.NODE_ENV = " + process.env.NODE_ENV);
// process.env.NODE_ENV = undefined

我在 sf.gggithub issues 上也提交了这个问题。

楼主 我想问一下 我申请 MLab使用终端连接,初始化的时候是有权限认证的,但是我怎么都添加不上权限。楼主能帮忙解决一下吗?? QQ图片20161124162751.png

config/production.js module.exports = { mongodb: ‘mongodb://myblog:myblog@ds139327.mlab.com:39327/myblog’ }; 停止程序,然后以 production 配置启动程序:

NODE_ENV=production supervisor --harmony index 进行到这里了,mongo shell可以连接到mongolab但是运行程序报错: MongoError: Authentication failed. at Function.MongoError.create stackoverflow上面说是因为用户名和密码不对,但是在production.js中已经填写了正确的用户名和密码,另外有一种说法是因为mongoose版本不对,但是我们这里用的是mongolass,我装的也是最新版,所以到底是什么原因呢?

@jowang2016 再看看你设的用户名和密码对吗,我这:

➜  Desktop mongo mongodb://myblog:myblog@ds139327.mlab.com:39327/myblog
MongoDB shell version: 3.2.10
connecting to: mongodb://myblog:myblog@ds139327.mlab.com:39327/myblog
rs-ds139327:PRIMARY> show dbs
2016-11-25T12:27:07.312+0800 E QUERY    [thread1] Error: listDatabases failed:{
  "ok" : 0,
  "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
  "code" : 13
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:761:19
shellHelper@src/mongo/shell/utils.js:651:15
@(shellhelp2):1:1

学习

来自酷炫的 CNodeMD

<h6>66666</h6>

<blockquote>66666</blockquote>

不错的学习经典,赞一个

来自酷炫的 CNodeMD

运行 node --harmony index 报错: MongoError: failed to connect to server [localhost:27017] on first connect

mongod启动了

untitled1.png

有没有人提供在线演示啊?

@nswbmw 非常感谢,我正在学习nodejs,很有帮助**

可口可乐了了

赞分享精神

楼主是重邮的啊

吊吊的!入门必备 <br><br>来自<a href=“https://lzxb.github.io/react-cnode/” target="_blank">react-cnode手机版</a>

多谢楼主,有照着做了一遍,不过还是感觉有许多地方需要自己慢慢消化,楼主可不可以推荐一两个经典的项目,我在慢慢摸索一下。

看来要再撸一遍,理一遍思路

@solarhell <br><br>来自<a href=“https://lzxb.github.io/react-cnode/” target="_blank">react-cnode手机版</a>

我也赶紧加入node大家庭。

赞赞,最近正在学

厉害,学习

楼主写的好棒,自己fork了一版已整理成电子书 gitbook N-blog 😺

好 <br>来自<a href=“https://lzxb.github.io/vue-cnode/” target="_blank">vue-cnode手机版</a>

@ManInBoat 不错,我收录了

@ZuChat 你的问题怎么解决的啊,我也是这个问题,好像不是node版本问题

create: function create(user) { console.log("======="+user); return User.create(user).exec(); }, 这句代码里的 User.create 方法是 什么类里面的 在mongodb里面没有找到这个方法 望知道的大神 回复下 谢谢

@zhanglei608 Mongolass 只做了两个别名,为了迎合 Mongoose 用户的习惯。。见:https://github.com/mongolass/mongolass/blob/master/lib/model.js#L21

@nswbmw 作者你好,我刚开始跟着您的教程学习node.js,学习到4.5 页面设计部分,按照您提供的代码写了一遍,但是访问localhost:3000/signup不能跳转到signup.ejs,页面只显示一个“signup”,我的代码使用的是redis做session缓存,因为mongodb下载不了。 index.js 部分代码如下 app.use(session({ store : new RedisStore({ host : “192.168.30.147”, port : 19000, ttl : 1000 }), name: config.session.key,// 设置 cookie 中保存 session id 的字段名称 secret: config.session.secret,// 通过设置 secret 来计算 hash 值并放在 cookie 中,使产生的 signedCookie 防篡改 cookie: { maxAge: config.session.maxAge// 过期时间,过期后 cookie 中的 session id 自动删除 }, resave: false, saveUninitialized: true }));

@tongliaozhang 我自己写错了 应该用render 我用的send,自己撞了一下墙惩罚自己

大神能不能出一个Mysql版本的简单的demo啊

@wang-weifeng <br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>

@artisan 如果你还不熟悉nodejs,那么推荐使用express,从简单学起,如果你对es6和es7比较熟悉,那就用koa吧。koa是express的进化版。<br/><br/><a class=“tag” target=“new” href=“https://github.com/BubblyPoker/cnode-vue”>来自 cnode-vue</a>

好赞!!!

@nswbmw 请教一个问题,我现在想把你的例子改成restful风格的,现在接口那边都改好了,由于我主要是做后端接口的,所以前端不是很懂,想请教一下,前端那边如何发put和delete请求,按照网上的方法添加 <input type=“hidden” name="_method" value=“put”>也没有作用。

<form class="ui form segment" method="post" action="/posts/postId/<%= post._id %>">
      <div class="field required">
        <label>标题</label>
        <input type="text" name="title" value="<%= post.title %>">
      </div>
      <div class="field required">
        <label>内容</label>
        <textarea name="content" rows="15"><%= post.content %></textarea>
      </div>
       <input type="hidden" name="_method" value="put">
      <input type="submit" class="ui button" value="发布">
    </div>
  </form>

赞赞赞!!

@liujavamail 谢了,我回去研究一下。

@MenZil https://tpoetry.herokuapp.com 可以去这里看看 。

按照楼主的文章新出炉的 blog 系统哈 。大家快去玩吧 。

@nswbmw 我要添加置顶功能 用时间戳来标记 数据库字段怎么加呢 ?

@ZuChat 兄弟,这个问题解决了吗?我也碰到这个问题了

支持,非常不错

@janrone 参考 cnode 就行,去看下 cnode api

@haocaokai test1 <br><br>来自<a href=“https://lzxb.github.io/react-cnode/” target="_blank">react-cnode手机版</a>

越来越吊了 <br>来自<a href=“https://lzxb.github.io/vue-cnode/” target="_blank">vue-cnode手机版</a>

@zhaoy875 <br><br>来自<a href=“https://lzxb.github.io/react-cnode/” target="_blank">react-cnode手机版</a>

@zhaoy875 <br><br>来自<a href=“https://lzxb.github.io/react-cnode/” target="_blank">react-cnode手机版</a>

@zhaoy875 <br><br>来自<a href=“https://lzxb.github.io/react-cnode/” target="_blank">react-cnode手机版</a>

@zhaoy875 <br><br>来自<a href=“https://lzxb.github.io/react-cnode/” target="_blank">react-cnode手机版</a>

@JRliu <br><br>来自<a href=“https://lzxb.github.io/react-cnode/” target="_blank">react-cnode手机版</a>

@solarhell <br><br>来自<a href=“https://lzxb.github.io/react-cnode/” target="_blank">react-cnode手机版</a>

@solarhell <br><br>来自<a href=“https://lzxb.github.io/react-cnode/” target="_blank">react-cnode手机版</a>

@alsotang 来看看 bug了。。。

@ruofeng086 兄弟 你的mongodb 没有启动

正在学习node,收藏一下<p style=“text-align:right”><a href=“https://github.com/lumia2046/cnode”> — — 来自lumia2046-react-cnode</a></p>

来自酷炫的 CNodeMD

赞,2016收官之作。

safdsnew-somalia-famine-relief-campaign-i-am-a-star-redefines-amp-39star-160933.jpegdzfddfdsdfdsfddss

sadsadaswa

来自酷炫的 CNodeMD

感谢分享,收藏了

<div class=“markdown-text”><p>这个教程牛逼了,向大神学习下</p></div> <br/> 来自 <a class=“from” href=“https://github.com/Lucifier129/isomorphic-cnode”>isomorphic-cnode</a>

请问nav-setting为什么鼠标放上去没有反应,不能登出呀

弄明白了,我把footer.ejs文件写错了

还不错 <br>来自<a href=“https://lzxb.github.io/vue-cnode/” target="_blank">vue-cnode手机版</a>

正在写一个blog,先mark,参考楼主的设计

来自酷炫的 CNodeMD

只想说一句:“感恩有你”…

非常感谢,楼主的分享!你这篇文章非常适合新手入门。已经跟着你的教程学习中了。感谢~~~

string

来自酷炫的 CNodeMD

@ma1291870239 多了奇怪的字符

来自酷炫的 CNodeMD

node 从新学 之前学过一点 但是都忘记了 加加班 赶紧学 希望手头的node项目能够赶紧上手

mongolass很多用法不知如何用。是参照mongoose吗?比如populate的用法

@douglasvegas 文档的确不详细。可以看测试和源码

棒 <br>来自<a href=“https://lzxb.github.io/vue-cnode/” target="_blank">vue-cnode手机版</a>

很棒,谢谢分享~~

学习一波👍👍😄 From Noder

学习学习

来自酷炫的 CNodeMD

@ZuChat 我也碰到了。有没有解决这个问题?

@ZuChat 我知道了。是node的版本问题。更新升级就好了

大赞!!!谢谢

xxxxx<p style=“text-align:right”><a href=“https://github.com/lumia2046/cnode”> — — 来自lumia2046-react-cnode</a></p>

正好学的时候发现书里的都跑不通, 收藏

非常棒!

来自酷炫的 CNodeMD

博主我有一个问题: 获取留言数的插件代码: Post.plugin(‘addCommentsCount’, { afterFind: function (posts) { return Promise.all(posts.map(function (post) { /* 用Promise.all的原因:?

   */
  return CommentModel
          .getCommentsCount(post._id)
          .then(function (commentsCount) {
              post.commentsCount = commentsCount;
              // console.log('successsssss');
                            return post;
           });
    }));

}, afterFindOne: function (post) { if (post) { return CommentModel.getCommentsCount(post._id).then(function (count) { post.commentsCount = count; return post; }); } return post; } });

用了promise.all之后会返回一个Promise对象,这个对象会传到Mongolass源码的query.js中这样一段代码里: return co(function* () { for (let plugin of plugins) { debug(’%s %s before plugin %s: result -> %j’, self._model._name, hookName, plugin.name, result); try { let value = plugin.hooks[hookName].apply(self, [result].concat(plugin.args)); /* 使用 co 的前提条件是,Generator 函数的 yield 命令后面,只能是 Thunk 函数或 Promise 对象。 */ result = yield (isGenerator(value) ? value : Promise.resolve(value)); console.log(result); } catch (e) { e.model = self._model._name; e.plugin = plugin.name; e.type = hookName; e.args = plugin.args; e.result = result; throw e; } debug(’%s %s after plugin %s: result -> %j’, self._model._name, hookName, plugin.name, result); } console.log(“result”+result); return result;//對象數組 }); let value = plugin.hooks[hookName].apply(self, [result].concat(plugin.args)); 这里的value会等于promise对象, 但是通过generator函数中的
result = yield (isGenerator(value) ? value : Promise.resolve(value)); result应该也是一个Promise对象啊,可是我打印了一下,此处的result是我查询的数据数组,这是为什么??? 定义contentToHtml插件的时候会返回查询数据的数组给generator函数中的value,Promise.resolve(value)会把这个数组传出去,然后ejs模板就可以遍历。这里我貌似懂,但是留言插件的Promise.all为什么要使用这个呢???并且经过generator函数执行之后传给ejs模板的也是一个Promise对象,但是我打印最后的return result 那里确实变成了数据对象数组。这是为什么???这个问题困扰了我三天了,请博主解答一下,谢谢

lib/mongo.js 中:

exports.Post = mongolass.model('Post', {
  author: { type: Mongolass.Types.ObjectId },
  title: { type: 'string' },
  content: { type: 'string' },
  pv: { type: 'number' }
});
exports.Post.index({ author: 1, id: -1 }).exec();// 按创建时间降序查看用户的文章列表

中author 设置类型为Mongolass.Types.ObjectId 是为什么? 为什么不直接用string?好处是什么? posts/author=admin查询失败 必须传入objectID值才可以 谢谢各位的回答.

@elva2596 试试

const co = require('co')
co(function*() {
  console.log(yield Promise.resolve(Promise.resolve(1)))
})

@wwmin 666<p style=“text-align:right”><a href=“https://github.com/lumia2046/cnode”> — — 来自lumia2046-react-cnode</a></p>

@wwmin 这个主要是使用了Mongolass的populate。可以看看Mongoose的populate,个人觉得类似Mysql中的表的关联。用来关联不同集合的不同文档。要求被populate字段的类型必须和被关联的文档的_id类型相同。 参考详见:http://mongoosejs.com/docs/api.html#query_Query-populate

@nswbmw 谢谢博主,原来是自己没有理解co的自动执行原理。

@douglasvegas 参考http://mongoosejs.com/docs/api.html#query_Query-populate

楼主好人~ <br><br>来自<a href=“https://lzxb.github.io/react-cnode/” target="_blank">react-cnode手机版</a>

Cannot read property ‘replace’ of undefined Please report this to https://github.com/chjj/marked. 博主,关于marked()有一个小的bug,报上面的错误的解决办法是:marked(cntent||’’)

node未来轻服务现在技术日新月异~~真的变化真快

博主,部署出现问题 Application error An error occurred in the application and your page could not be served. If you are the application owner, check your logs for details. 如何解决呢???

@gaoxiaosong1113 请问为什么部署不成功呢?? Application error An error occurred in the application and your page could not be served. If you are the application owner, check your logs for details.

这是我在控制台heroku logs的日志: 2017-01-23T09:55:41.579057+00:00 app[web.1]: npm ERR! Or if that isn’t available, you can get their info via: 2017-01-23T09:55:41.579180+00:00 app[web.1]: npm ERR! npm owner ls myblog 2017-01-23T09:55:41.579306+00:00 app[web.1]: npm ERR! There is likely additional logging output above. 2017-01-23T09:55:41.582651+00:00 app[web.1]: 2017-01-23T09:55:41.582998+00:00 app[web.1]: npm ERR! Please include the following file with any support request: 2017-01-23T09:55:41.583113+00:00 app[web.1]: npm ERR! /app/npm-debug.log 2017-01-23T09:55:41.677457+00:00 heroku[web.1]: State changed from starting to crashed 2017-01-23T09:55:42.826403+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/" host=dai-lu.herokuapp.com request_id=8c9782ab-48a7-4fbd-9f6b-8bc51dfacbb1 fwd=“103.6.86.50” dyno= connect= service= status=503 bytes= 2017-01-23T09:55:44.106454+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/favicon.ico" host=dai-lu.herokuapp.com request_id=1ba59102-9a87-4fa1-8482-c1327e4b01b4 fwd=“103.6.86.50” dyno= connect= service= status=503 bytes= 2017-01-23T09:57:06.367256+00:00 heroku[router]: at=info code=H80 desc=“Maintenance mode” method=GET path="/" host=dai-lu.herokuapp.com request_id=093b0958-87fc-4a5d-91e8-6c11b6d8edc8 fwd=“103.6.86.50” dyno= connect= service= status=503 bytes= 2017-01-23T09:57:08.379398+00:00 heroku[router]: at=info code=H80 desc=“Maintenance mode” method=GET path="/favicon.ico" host=dai-lu.herokuapp.com request_id=47b4c9a0-9228-470c-99fd-d5deed952407 fwd=“103.6.86.50” dyno= connect= service= status=503 bytes= 2017-01-23T09:57:18.380670+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/" host=dai-lu.herokuapp.com request_id=28c3fbd5-4002-4a68-8973-609c504e5f2c fwd=“103.6.86.50” dyno= connect= service= status=503 bytes= 2017-01-23T09:57:19.131315+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/favicon.ico" host=dai-lu.herokuapp.com request_id=8a987dd0-45b5-4bb9-82ad-31d2a40df0bf fwd=“103.6.86.50” dyno= connect= service= status=503 bytes= 2017-01-23T09:57:21.847532+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/" host=dai-lu.herokuapp.com request_id=d8da03a2-c172-4afa-b225-605b0498d5a7 fwd=“103.6.86.50” dyno= connect= service= status=503 bytes= 2017-01-23T09:57:22.600277+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/favicon.ico" host=dai-lu.herokuapp.com request_id=68f12216-2be3-406b-91f1-8450f024123e fwd=“103.6.86.50” dyno= connect= service= status=503 bytes= 2017-01-23T09:57:40.744846+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/" host=dai-lu.herokuapp.com request_id=a97258a9-6a31-4bfd-9f39-5d9335d4b92f fwd=“103.6.86.50” dyno= connect= service= status=503 bytes= 2017-01-23T09:57:42.081913+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/favicon.ico" host=dai-lu.herokuapp.com request_id=cbb542bb-4eeb-451a-92df-bf55ccb5efab fwd=“103.6.86.50” dyno= connect= service= status=503 bytes= 2017-01-23T09:59:31.743861+00:00 heroku[web.1]: State changed from crashed to starting 2017-01-23T09:59:35.207078+00:00 heroku[web.1]: Starting process with command npm start 2017-01-23T09:59:38.588220+00:00 app[web.1]: 2017-01-23T09:59:38.588239+00:00 app[web.1]: > myblog@1.0.0 start /app 2017-01-23T09:59:38.588247+00:00 app[web.1]: > cross-env NODE_ENV=production pm2 start index.js --node-args=’–harmony’ --name ‘myblog’ 2017-01-23T09:59:38.588248+00:00 app[web.1]: 2017-01-23T09:59:38.597475+00:00 app[web.1]: sh: 1: cross-env: not found 2017-01-23T09:59:38.604372+00:00 app[web.1]: 2017-01-23T09:59:38.617246+00:00 app[web.1]: npm ERR! Linux 3.13.0-105-generic 2017-01-23T09:59:38.617533+00:00 app[web.1]: npm ERR! argv “/app/.heroku/node/bin/node” “/app/.heroku/node/bin/npm” "start" 2017-01-23T09:59:38.617750+00:00 app[web.1]: npm ERR! node v6.9.1 2017-01-23T09:59:38.617945+00:00 app[web.1]: npm ERR! npm v3.10.8 2017-01-23T09:59:38.618150+00:00 app[web.1]: npm ERR! file sh 2017-01-23T09:59:38.618349+00:00 app[web.1]: npm ERR! code ELIFECYCLE 2017-01-23T09:59:38.618536+00:00 app[web.1]: npm ERR! errno ENOENT 2017-01-23T09:59:38.618733+00:00 app[web.1]: npm ERR! syscall spawn 2017-01-23T09:59:38.618916+00:00 app[web.1]: npm ERR! myblog@1.0.0 start: cross-env NODE_ENV=production pm2 start index.js --node-args='--harmony' --name 'myblog' 2017-01-23T09:59:38.619074+00:00 app[web.1]: npm ERR! spawn ENOENT 2017-01-23T09:59:38.619222+00:00 app[web.1]: npm ERR! 2017-01-23T09:59:38.619534+00:00 app[web.1]: npm ERR! Failed at the myblog@1.0.0 start script ‘cross-env NODE_ENV=production pm2 start index.js --node-args=’–harmony’ --name ‘myblog’’. 2017-01-23T09:59:38.619672+00:00 app[web.1]: npm ERR! Make sure you have the latest version of node.js and npm installed. 2017-01-23T09:59:38.619801+00:00 app[web.1]: npm ERR! If you do, this is most likely a problem with the myblog package, 2017-01-23T09:59:38.619947+00:00 app[web.1]: npm ERR! not with npm itself. 2017-01-23T09:59:38.620091+00:00 app[web.1]: npm ERR! Tell the author that this fails on your system: 2017-01-23T09:59:38.620253+00:00 app[web.1]: npm ERR! cross-env NODE_ENV=production pm2 start index.js --node-args=’–harmony’ --name ‘myblog’ 2017-01-23T09:59:38.620384+00:00 app[web.1]: npm ERR! You can get information on how to open an issue for this project with: 2017-01-23T09:59:38.620690+00:00 app[web.1]: npm ERR! Or if that isn’t available, you can get their info via: 2017-01-23T09:59:38.620531+00:00 app[web.1]: npm ERR! npm bugs myblog 2017-01-23T09:59:38.620843+00:00 app[web.1]: npm ERR! npm owner ls myblog 2017-01-23T09:59:38.620986+00:00 app[web.1]: npm ERR! There is likely additional logging output above. 2017-01-23T09:59:38.626555+00:00 app[web.1]: npm ERR! Please include the following file with any support request: 2017-01-23T09:59:38.626310+00:00 app[web.1]: 2017-01-23T09:59:38.626692+00:00 app[web.1]: npm ERR! /app/npm-debug.log 2017-01-23T09:59:38.720256+00:00 heroku[web.1]: State changed from starting to crashed 2017-01-23T09:59:38.708211+00:00 heroku[web.1]: Process exited with status 1 2017-01-23T09:59:42.028811+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/" host=dai-lu.herokuapp.com request_id=930c245b-b7eb-420b-ba9f-742a5bf9d42a fwd=“42.86.153.96” dyno= connect= service= status=503 bytes= 2017-01-23T09:59:43.117828+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/favicon.ico" host=dai-lu.herokuapp.com request_id=1a4de102-5007-41e1-a580-624f1b0e8375 fwd=“42.86.153.96” dyno= connect= service= status=503 bytes= 2017-01-23T10:04:56.498402+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/" host=dai-lu.herokuapp.com request_id=5d9f2cec-66fd-4088-b70a-bd1b98793f85 fwd=“103.6.86.50” dyno= connect= service= status=503 bytes= 2017-01-23T10:04:57.671613+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/favicon.ico" host=dai-lu.herokuapp.com request_id=a16a2707-a0ea-4fed-bc85-61e759f13464 fwd=“103.6.86.50” dyno= connect= service= status=503 bytes= 2017-01-23T10:07:13.397334+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/" host=dai-lu.herokuapp.com request_id=228222f0-0cd7-410a-8ad2-41fa352333ea fwd=“103.6.86.50” dyno= connect= service= status=503 bytes= 2017-01-23T10:07:14.525960+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/favicon.ico" host=dai-lu.herokuapp.com request_id=fca6d458-3c1f-49c3-861e-d02f7ae4298d fwd=“103.6.86.50” dyno= connect= service= status=503 bytes= 2017-01-23T10:14:53.600750+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/" host=dai-lu.herokuapp.com request_id=50372bc4-3cff-4657-be83-4a52a59f2f6e fwd=“103.6.86.50” dyno= connect= service= status=503 bytes= 2017-01-23T10:14:54.583905+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/favicon.ico" host=dai-lu.herokuapp.com request_id=eb993897-99fb-4292-9c5f-4624c361f5d5 fwd=“103.6.86.50” dyno= connect= service= status=503 bytes= 2017-01-23T10:15:22.749173+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/" host=dai-lu.herokuapp.com request_id=bd4d2023-9da7-4b71-99ca-a1ab5978a302 fwd=“103.6.86.50” dyno= connect= service= status=503 bytes= 2017-01-23T10:15:23.769422+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/favicon.ico" host=dai-lu.herokuapp.com request_id=c902bade-8542-41fd-b068-1e1cbce3063e fwd=“103.6.86.50” dyno= connect= service= status=503 bytes= 2017-01-23T10:15:24.312283+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/" host=dai-lu.herokuapp.com request_id=903c77d7-199e-46ad-8707-41ffc94156d8 fwd=“103.6.86.50” dyno= connect= service= status=503 bytes= 2017-01-23T10:15:25.050027+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/favicon.ico" host=dai-lu.herokuapp.com request_id=d36568cb-fb28-4cb3-b764-2f774fbf44a7 fwd=“103.6.86.50” dyno= connect= service= status=503 bytes= 2017-01-23T10:20:23.016247+00:00 heroku[web.1]: State changed from crashed to starting 2017-01-23T10:20:25.118816+00:00 heroku[web.1]: Starting process with command npm start 2017-01-23T10:20:27.802824+00:00 heroku[web.1]: Process exited with status 1 2017-01-23T10:20:27.700200+00:00 app[web.1]: 2017-01-23T10:20:27.700217+00:00 app[web.1]: > myblog@1.0.0 start /app 2017-01-23T10:20:27.700218+00:00 app[web.1]: > cross-env NODE_ENV=production pm2 start index.js --node-args=’–harmony’ --name ‘myblog’ 2017-01-23T10:20:27.700219+00:00 app[web.1]: 2017-01-23T10:20:27.705243+00:00 app[web.1]: sh: 1: cross-env: not found 2017-01-23T10:20:27.709946+00:00 app[web.1]: 2017-01-23T10:20:27.718782+00:00 app[web.1]: npm ERR! Linux 3.13.0-105-generic 2017-01-23T10:20:27.719004+00:00 app[web.1]: npm ERR! argv “/app/.heroku/node/bin/node” “/app/.heroku/node/bin/npm” "start" 2017-01-23T10:20:27.719130+00:00 app[web.1]: npm ERR! node v6.9.1 2017-01-23T10:20:27.719251+00:00 app[web.1]: npm ERR! npm v3.10.8 2017-01-23T10:20:27.719321+00:00 app[web.1]: npm ERR! file sh 2017-01-23T10:20:27.719492+00:00 app[web.1]: npm ERR! code ELIFECYCLE 2017-01-23T10:20:27.719695+00:00 app[web.1]: npm ERR! errno ENOENT 2017-01-23T10:20:27.719879+00:00 app[web.1]: npm ERR! syscall spawn 2017-01-23T10:20:27.719940+00:00 app[web.1]: npm ERR! myblog@1.0.0 start: cross-env NODE_ENV=production pm2 start index.js --node-args='--harmony' --name 'myblog' 2017-01-23T10:20:27.720094+00:00 app[web.1]: npm ERR! spawn ENOENT 2017-01-23T10:20:27.720238+00:00 app[web.1]: npm ERR! 2017-01-23T10:20:27.720360+00:00 app[web.1]: npm ERR! Failed at the myblog@1.0.0 start script ‘cross-env NODE_ENV=production pm2 start index.js --node-args=’–harmony’ --name ‘myblog’’. 2017-01-23T10:20:27.720442+00:00 app[web.1]: npm ERR! Make sure you have the latest version of node.js and npm installed. 2017-01-23T10:20:27.720548+00:00 app[web.1]: npm ERR! If you do, this is most likely a problem with the myblog package, 2017-01-23T10:20:27.720631+00:00 app[web.1]: npm ERR! not with npm itself. 2017-01-23T10:20:27.720912+00:00 app[web.1]: npm ERR! Tell the author that this fails on your system: 2017-01-23T10:20:27.721192+00:00 app[web.1]: npm ERR! cross-env NODE_ENV=production pm2 start index.js --node-args=’–harmony’ --name 'myblog’ 2017-01-23T10:20:27.721193+00:00 app[web.1]: npm ERR! You can get information on how to open an issue for this project with: 2017-01-23T10:20:27.721194+00:00 app[web.1]: npm ERR! npm bugs myblog 2017-01-23T10:20:27.721224+00:00 app[web.1]: npm ERR! Or if that isn’t available, you can get their info via: 2017-01-23T10:20:27.721338+00:00 app[web.1]: npm ERR! npm owner ls myblog 2017-01-23T10:20:27.721394+00:00 app[web.1]: npm ERR! There is likely additional logging output above. 2017-01-23T10:20:27.725297+00:00 app[web.1]: 2017-01-23T10:20:27.725675+00:00 app[web.1]: npm ERR! Please include the following file with any support request: 2017-01-23T10:20:27.725677+00:00 app[web.1]: npm ERR! /app/npm-debug.log 2017-01-23T10:20:27.813265+00:00 heroku[web.1]: State changed from starting to crashed 2017-01-23T10:20:58.763118+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/" host=dai-lu.herokuapp.com request_id=46278ef1-4914-4ae3-b3a9-794b921e069e fwd=“103.6.86.50” dyno= connect= service= status=503 bytes= 2017-01-23T10:20:59.772239+00:00 heroku[router]: at=error code=H10 desc=“App crashed” method=GET path="/favicon.ico" host=dai-lu.herokuapp.com request_id=1b2e36e4-8f44-4015-9ddc-374c19cad958 fwd=“103.6.86.50” dyno= connect= service= status=503 bytes=

测试部分,如何编写测试 -缺少头像- 用例 ??? 新手求教,谢谢

感谢大神!

学习ing。努力努力💪

感谢大神!已经跟着一起学习了。!

正在学习,赞一个

很好,点赞

看完了,全部码过一遍,打算再理一遍,跑过来再点个赞。感谢大神

正在学习,多谢

那就在跟着学一遍吧

@nswbmw 4.9章 我们设计的schema是这样的: exports.Post = mongolass.model(‘Post’, { author: { type: Mongolass.Types.ObjectId }, title: { type: ‘string’ }, content: { type: ‘string’ }, pv: { type: ‘number’ } }); exports.Post.index({ author: 1, _id: -1 }).exec();// 按创建时间降序查看用户的文章列表

routes/posts文件里面 var author = req.session.user._id; var post = { author: author, title: title, content: content, pv: 0 };

PostModel.create(post) .then(function (result) { // 此 post 是插入 mongodb 后的值,包含 _id post = result.ops[0]; req.flash(‘success’, ‘发表成功’); // 发表成功后跳转到该文章页 res.redirect(/posts/${post._id}); }) .catch(next); });

创建一条post信息后post对象应该因该有author,title,conten,pv,Object_id 这5个key呀。 其中author == req.session.user._id; 那么下面这里是不是写错了呢??

views/components/post-content.ejs <% if (user && post.author._id && user._id.toString() === post.author._id.toString()) { %> <div class=“ui inline dropdown”> <div class=“text”></div> <i class=“dropdown icon”></i> <div class=“menu”> <div class=“item”><a href="/posts/<%= post._id %>/edit">编辑</a></div> <div class=“item”><a href="/posts/<%= post._id %>/remove">删除</a></div> </div> </div> <% } %>

在这个if语句里面 if (user && post.author._id && user._id.toString() === post.author._id.toString()) post.author == req.session.user._id,author对象里面还有id对象吗?? 是不是手误打错了。 我觉得判定条件应该是 user && post.author && user._id.toString() === post.author…toString() 博主,我的看法有错吗??

@hopperhuang author 是 populate 后的吧,不是 ObjectId

@nswbmw 谢谢博主的提点,我看到了。

放到github了,不错

@nswbmw 博主,你好 在/models/Posts.js里面,教程写了一个加载评论阅读数到文章数据的插件 你是这样写的 var CommentModel = require(’./comments’);

// 给 post 添加留言数 commentsCount Post.plugin(‘addCommentsCount’, { afterFind: function (posts) { return Promise.all(posts.map(function (post) { return CommentModel.getCommentsCount(post._id).then(function (commentsCount) { post.commentsCount = commentsCount; return post; }); })); }, afterFindOne: function (post) { if (post) { return CommentModel.getCommentsCount(post._id).then(function (count) { post.commentsCount = count; return post; }); } return post; } });

我觉得用async 来写也挺不错,语义更加清晰 Post.plugin(‘addCommentsCount’, { afterFind: function (posts) { return Promise.all(posts.map(async function(post){ var count = await CommentModel.getCommentsCount(post._id); post.commentsCount = count; return post; })); }, afterFindOne: function (post) { if (post) { return (async function(post){ var count = await CommentModel.getCommentsCount(post._id); post.commentsCount = count ; return post; })();
} return post; } });

@hopperhuang 如果用的 node@7+ 可以用 async/await

@nswbmw 我就是用的node 7.1.0 跟着你的项目,自己也跟着码一遍,看到这里就联系到之前看过的async/await, 所以就想起这个写法了。

PostModel.create(post) .then(function (result) { // 此 post 是插入 mongodb 后的值,包含 _id post = result.ops[0]; //这一段真的看不懂,ops是怎么出来的,好像源码中也没有!!! req.flash(‘success’, ‘发表成功’); res.redirect(/posts/${post._id}); }) .catch(next); }); @nswbmw 能请教下您,我上面标注的这段代码,result.ops[0]是怎么一回事吗?小白真的看不懂!!!

@leonbaichi 打印下 result 不就知道了

@nswbmw 博主,请教您一下。

我在UCLOUD部署了代码 也运行了 0|myblog | new-blog listening on port 80 0|myblog | new-blog listening on port 80 0|myblog | new-blog listening on port 80

但是访问我的外网ip却什么都没有,这是怎么回事呢??

一个月之前过来看,几乎看不懂。经过一个月多月的自学,现在差不多能看懂了~谢谢LZ的分享

这么好的入门资源,必须顶。

我正好要写权限管理,感谢博主!

只有我觉得 看完还是一头雾水吗?

正好学习,第一次留言就给你了! 快夸我。我要是没学会就找你麻烦!

发一个mongo启动配置的 链接

回到顶部