Node.js全栈开发

By Harttle 课程任务:23 个 免费加入

基于 Javascript 的全栈开发,以一个多用户的博客站点(http://demo.tianmaying.com/)开发为例!整个过程将涉及到:开发依赖管理、NoSQL数据库、自动构建、模板引擎等。

第3课 HTML
第4课 CSS
第5课 Bootstrap
第6课 Javascript
第7课 客户端脚本
第9课 Express.js
第10课 表单的提交
第11课 表单的验证
第12课 Mongo数据库
第13课 Session
第14课 邮件服务
第15课 验证邮箱
第16课 Web表单
第19课 模板片段
第20课 对象关系
第21课 配置管理
第22课 自动化构建
第23课 还能做什么

登录发表评论 登录 注册

luda1859
luda1859 于 2 天前

第12课 Mongo数据库 注册用户的的数据,为何会提交到数据库的users里?users这个名称是在哪里定义的?

module.exports = mongoose.model('User', UserSchema);

这句里的User定义的不是数据集名称吗?

但在mongo里查询db.users.find()才能找到提交的数据。百思不得其解。

Captain3000
Captain3000 于 12月15日

很好啊!100个赞,简单易懂。

第一章的实战任务链接找不到?

chen3316204
chen3316204 于 10月26日

Anyone else ?

hyh1937
hyh1937 于 6月14日

访问localhost:3000/account/register时出现404,拿不到页面怎么办?

Xll824542
Xll824542 于 6月12日

Failed to load resource: the server responded with a status of 500 (Internal Server Error)

Emmanuel
Emmanuel 于 2月7日

创建Express项目的时候

在第3步 npm install 安装依赖时 有警告说 jade 已经更名为 pug 浏览器打开 
没有进行处理,然后第四步 node ./bin/www 执行完 用http://localhost:3000 报错找不到module  promise 如下,请大牛帮忙解答,谢谢了!

Error: Cannot find module 'promise'

   at Function.Module._resolveFilename (module.js:325:15)

   at Function.Module._load (module.js:276:25)

   at Module.require (module.js:353:17)

   at require (internal/module.js:12:17)

   at Object.<anonymous> (E:\temp\test\blog\node_modules\jade\node_modules\transformers\lib\shared.js:1:77)

   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)



可能是与node版本相关问题(之前node.jss是去菜鸟学院教程下载的)。我将node.js卸载,到node.js官网去下载最新版本node.js之后就可以了。 

Emmanuel
Emmanuel 于 2月6日

app.get('/',function(req,res){

    res.send('Hello world');

});
这段代码要放在 日志服务代码的后面,日志里面才会有内容。


我的log日志里面什么都没有 请问这是为什么呢

@sergeantOng

Emmanuel
Emmanuel 于 2月6日

我的log日志也是什么都没有

Emmanuel
Emmanuel 于 2月5日

创建 package.json是要到NPM官网吗?

LINE2016
LINE2016 于 12月11日
            // 保证激活码不会重复
            user.activeToken = user._id buf.toString('hex');

id 后面的空格是什么啊

LINE2016
LINE2016 于 12月9日
sergeantOng
sergeantOng 于 11月21日

我的log日志里面什么都没有 请问这是为什么呢

sergeantOng
sergeantOng 于 11月18日

请问我在使用发布的包为什么自己创了个test.js却显示could not found module。。。。

HAYWAEL
HAYWAEL 于 11月17日

修改一下就好

subject: 'test',

发邮件测试可以发给自己,但发别的邮箱就报错:

 Error: Message failed: 554 DT:SPM

不知道怎么解决?

@.绑定已有账号

zp_gog
zp_gog 于 11月2日
<script src="/javascripts/account.js"></script>

这一句有问题吧,account.js是放在route里面的啊

zp_gog
zp_gog 于 11月2日

我的log日志里记录的时间不是北京时间. 这个怎么处理呢?

.绑定已有账号
.绑定已有账号 于 10月8日

谢谢回复。http://stackoverflow.com/questions/38138445/node3341-deprecationwarning-mongoose-mpromise

这个只是DeprecationWarning警告吧,并不是报错,再仔细检查一下代码和MongoDB的版本吧

能不能讲清楚一点。连接MongoDB时,没有输出meow,而是报错了("Mongoose: mpromise is deprecated.")。

卡到这儿半天了,真是郁闷。。谁能帮帮我。

@.绑定已有账号

@wangxu88323

wangxu88323
wangxu88323 于 10月8日

这个只是DeprecationWarning警告吧,并不是报错,再仔细检查一下代码和MongoDB的版本吧

能不能讲清楚一点。连接MongoDB时,没有输出meow,而是报错了("Mongoose: mpromise is deprecated.")。

卡到这儿半天了,真是郁闷。。谁能帮帮我。

@.绑定已有账号

.绑定已有账号
.绑定已有账号 于 9月26日

发邮件测试可以发给自己,但发别的邮箱就报错:

 Error: Message failed: 554 DT:SPM

不知道怎么解决?

.绑定已有账号
.绑定已有账号 于 9月23日

能不能讲清楚一点。连接MongoDB时,没有输出meow,而是报错了("Mongoose: mpromise is deprecated.")。

卡到这儿半天了,真是郁闷。。谁能帮帮我。

susy666
susy666 于 9月16日

对,一定要加这个,否则 user.create是无法执行成功的。页面注册时会一直得不到返回。

user.js中没有数据库链接

mongoose.connect('mongodb://localhost/test');

@Yuanjie

mmutuyu
mmutuyu 于 9月13日

yourenme

lunaticf
lunaticf 于 8月11日

npm install express-hbs 和直接hbs两个得到的有什么区别?

lunaticf
lunaticf 于 8月11日

hbs.registerPartials is not a function?

marcttt
marcttt 于 8月9日

点击注册按钮后,返回错误页,状态码为500,是什么情况呀?

var router = require('express').Router();

router.route('/register')
// 返回注册页面
    .get(function (req, res) {
        res.render('account/register', {title: '注册'});
    })
    // 接受用户表单
    .post(function (req, res, next) {
        var username = req.body.username,
            password = req.body.password;

        console.log('Register post received!');
        console.log('username:', username, 'password::', password);
    });

module.exports = router;
gongjiaxin
gongjiaxin 于 8月2日

Image

Danielle
Danielle 于 7月28日

错误处理中间件何时会执行呢?当然是当错误发生时。你需要手动地将错误传递给错误处理中间件。不app.js中创建如下的中间件来测试错误处理:

错别字。。

Yuanjie
Yuanjie 于 6月29日

user.js中没有数据库链接

mongoose.connect('mongodb://localhost/test');
Yuanjie
Yuanjie 于 6月29日

express现在生成的模块是用jade来实现,能否将“模板组织”这部分的内容说同步调整下(现在是用HBS)

David
David 于 6月28日

修改了,谢谢grin

超时与代码中的时间不一致。代码中是3000,说明中是5000

@Yuanjie

Yuanjie
Yuanjie 于 6月27日

超时与代码中的时间不一致。代码中是3000,说明中是5000

cser
cser 于 6月13日

一起交流啊

cser
cser 于 6月13日

我在跟这个教程

dare21century
dare21century 于 6月13日

有一块学习的吗?

David
David 于 6月2日

@React_react-router 改过来了,谢谢

React_react-router
React_react-router 于 6月2日
app.listen(1337, funcion(){
    console.log('Example app listening on port 1337!');
});

function少了个t

David
David 于 6月2日

sweat_smile右侧‘广场‘’笔记’可不可以收回去?

@wangxu88323

再点击一次就收回去了

wangxu88323
wangxu88323 于 6月2日

sweat_smile右侧‘广场‘’笔记’可不可以收回去?

wangxu88323
wangxu88323 于 6月2日
app.use(session(session({secret: 'hello! TMY', resave: true, saveUninitialized: true})));

这里多写了1个session()吧...

wangxu88323
wangxu88323 于 6月1日

@Harttle

老师,可能是我阅读时忽略了body-parser,

但是我觉得教程应适当更新一下,讲解一下body-parser包的作用

wangxu88323
wangxu88323 于 6月1日

@Harttle

非常感谢,明白了,类似于一个是post,一个是get

wanqingfengtao
wanqingfengtao 于 5月31日

这个图片好眼熟!

Harttle
Harttle 于 5月31日

@wangxu88323,req.body为空可能是因为你没有引入bodyparser。查看一下app.js是否有问题。

Harttle
Harttle 于 5月31日

@wangxu88323 req.body是用户提交表单对象,包括form元素通过浏览器提交的,和ajax post/put时提交的。req.query是URL的参数对象,例如:http://example.com?foo=bar中req.query.foo === 'bar'

wangxu88323
wangxu88323 于 5月31日

把 req.body.username 改为 req.query.username

不报错了,但是收到username为空,对req.body和req.query还是不明白区别,请老师再详细的讲一下

wangxu88323
wangxu88323 于 5月31日

TypeError: Cannot read property 'username' of undefined

我怀疑是req.body这里的问题

pray请求帮助

wangxu88323
wangxu88323 于 5月31日

@Cliff

pray多谢,找到问题了,没写

app.engine('hbs', hbs.express4());

joy

Cliff
Cliff 于 5月31日

@wangxu88323

抱歉,安装完成后还差一步,在express中注册hbs引擎,教程已经更新:


var hbs = require('express-hbs');
app.engine('hbs', hbs.express4());
wangxu88323
wangxu88323 于 5月31日

@Cliff

您好,express-hbs已安装,是不是需要先install hbs,然后再install express-hbs?

"dependencies": {
    "express": "^4.13.4",
    "express-hbs": "^1.0.1",
    "morgan": "^1.7.0",
    "serve-favicon": "^2.3.0"
  }
Cliff
Cliff 于 5月30日

@wangxu88323 

没有进行安装操作吧,首先我们需要安装Handlebars模板引擎:

$ npm install express-hbs --save
wangxu88323
wangxu88323 于 5月30日

Cannot find module 'hbs'

zyxsxqs
zyxsxqs 于 5月22日

8.1章 第三段代码第六行  ,最后是不是少个.toString() ?

var html = fs.readFileSync(__dirname + '/index.html');
天码君
天码君 于 5月12日

@我就是我 gulp是新添加的内容,我们正准备将Grunt部分更新为gulp,近两天就会完成。

我就是我
我就是我 于 5月11日

gulp那章为什么啥也没有

David
David 于 4月27日

由于express相关npm库的版本更新,包括hbs模板引擎、session在内的工具可能需要更新版本(如lodash)和重新配置。

相关的课程内容可能需要修改(尚未完成),如需自己解决可以直接参考这些npm库的文档:

:)

littlefour
littlefour 于 4月27日

在 session 课程中,我按照代码时间,所有的页面请求都会 出现

secret option required for sessions

的问题。

Clipboard Image.png

provision
provision 于 4月7日

刚试了下可以了,谢谢各位的帮助。@颜卿今天Coding了吗 @qiyan147 @Harttle 。是我自己的问题,配置view路径时弄错了.

qiyan147
qiyan147 于 4月7日

@provision你看看是不是路径错了  我照着学到那里也出现了这个问题  我是路径写错了

颜卿今天Coding了吗

@provision 不是因为bug 是因为逗逼教程数据库存入时if语句{}忘了写了 

同学们就跟着抄了

颜卿今天Coding了吗

@Harttle aggre ,但是如果我一定要引用error.jade 呢

Harttle
Harttle 于 4月3日

@provision这是因为你的程序有bug,然后触发了错误处理中间件function(err, req, res, next)。该函数中尝试渲染模板`views/error.hbs`,而`error.hbs`不存在所以Handlebars抛出了该错误。可以尝试在错误处理中间件中渲染模板前console.log(err)出来,或者添加一个error.hbs,并显示err的内容。比如:{{err.message}}{{err.stack}}

provision
provision 于 4月1日

您好,我照着学到9课,到模板引擎那里,照着写的代码运行不了。

Error: Failed to lookup view "error" in views directory。一直报这个错误

Toder
Toder 于 1月30日

课程全部开放了,欢迎大家学习和提供建议smiley

Harttle
Harttle 于 11月9日

@Friendy 我们天码营团队使用NodeJS开发已经有一年多了,就我的个人经验谈一下吧。

优势:

前后端纯JavaScript,小公司招JavaScript程序员就够了,另外前后端库还能更好地对接;

高并发,JavaScript没有为每一个HTTP Request单独开辟线程,而是使用底层框架实现异步IO事件,在应用层是单线程的,只要内存够大,并发不成问题。

极大的灵活性,Ruby,Python这些语言开始做Web开发后整个Web开发变得非常灵活,NodeJS也是这样一个极具灵活性的编程语言。可以在MVC模型上非常方便地添加额外的设计。

劣势:

中文资料少,貌似在国内还没有形成主流。解决问题需要查阅英文文档,API和NPM。

单线程的编程模型,异步风格可能会造成传统Web开发者的不习惯,需要有一个守护进程来监测线程的运行。

太灵活,没有太死的开发框架。需要开发者自己选用和实现能够满足需求的设计。

企业:

据我所知,LinkedIn,paypal,Netflix都在使用NodeJS,主要还是看重高并发的特性。而天码营看重的是它的灵活和可塑性。

学习曲线:

如果你是前端开发者,NodeJS的学习曲线是要低于其他框架的,毕竟你已经很习惯于JS以及它的异步回调风格。就我学习Node的过程而言,大多数时间都在学习新的设计和工具,而不是学习NodeJS本身。NodeJS本身很快就能掌握的。

Friendy
Friendy 于 10月30日

使用 Node.js 的优势和劣势都有哪些? 前景怎样? 目前企业中用的多吗?学习曲线陡不陡?

老师能不能大致说一下

lx_space
lx_space 于 7月2日

高级JavaScript 语言

二豆子
二豆子 于 6月30日

node.js操作数据库成功后,怎样给网页一个提示

这个js代码 咋写?

Harttle
Harttle 于 6月29日

divliul都是block级别的元素,它们的宽度会自动填充整行。img是inline级别的元素,可以设置它父级的文本对齐属性让它居中。在这里,可以加CSS:

li{
  text-align: center;
}
且听风铃
且听风铃 于 6月19日

现在宽屏设计常见,为了适应不同的显示器,往往给div一个100%的宽度,下面再写,那么问题来了,这样的图片怎样做到在任何窗口宽度时自动居中显示?

```

```

Harttle
Harttle 于 6月19日

Node.js是javascript运行时,就像JVM和Java的关系一样。简言之javascript是被node.js解释执行的。浏览器是javascript的另一种常见的运行时。

事实上,在javascript的术语中,node.js和浏览器被称为宿主环境

Harttle
Harttle 于 6月19日

.NET是C#的运行时,同时提供了丰富的类库。Node.js是javascript的运行时,也提供了一些核心模块(相当于类库)。

express是Node.js的一个MVC框架,提供了在Node.js运行时上构建web应用的方式。

npm是Node.js的包管理工具,这是Node.js与.NET不同的一点:在Node.js开发中我们不需要手动去寻找并下载安装第三方工具,npm会自动完成依赖的下载、构建和安装第三方工具。

jade只是一个模板引擎,可以理解为一种方便地创建HTML页面的工具。

阿钰
阿钰 于 6月14日

话说,怎么理解node.js和Javascript之间的关系呀?

上吧,皮卡丘
上吧,皮卡丘 于 6月13日

同是小白,多多指教

大白
大白 于 6月12日

刚接触nodejs,看了下和它一起用的东西有很多,比如express、mongodb、mysql、redis、npm、jade。 我想问问大神们,其中mongodb、mysql、redis这3个是数据我知道,express是框架? npm、jade也是框架吗? 类似微软的.NET?

咨询老师