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课 还能做什么

登录发表评论 登录 注册

hyh1937
hyh1937 于 4 个月前

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

Xll824542
Xll824542 于 4 个月前

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

Emmanuel
Emmanuel 于 9 个月前

创建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 于 9 个月前

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

    res.send('Hello world');

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


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

@sergeantOng

Emmanuel
Emmanuel 于 9 个月前

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

Emmanuel
Emmanuel 于 9 个月前

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

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

id 后面的空格是什么啊

LINE2016
LINE2016 于 10 个月前
sergeantOng
sergeantOng 于 1 年前

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

sergeantOng
sergeantOng 于 1 年前

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

HAYWAEL
HAYWAEL 于 1 年前

修改一下就好

subject: 'test',

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

 Error: Message failed: 554 DT:SPM

不知道怎么解决?

@.绑定已有账号

zp_gog
zp_gog 于 1 年前
<script src="/javascripts/account.js"></script>

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

zp_gog
zp_gog 于 1 年前

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

.绑定已有账号
.绑定已有账号 于 1 年前

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

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

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

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

@.绑定已有账号

@wangxu88323

wangxu88323
wangxu88323 于 1 年前

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

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

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

@.绑定已有账号

.绑定已有账号
.绑定已有账号 于 1 年前

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

 Error: Message failed: 554 DT:SPM

不知道怎么解决?

.绑定已有账号
.绑定已有账号 于 1 年前

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

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

susy666
susy666 于 1 年前

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

user.js中没有数据库链接

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

@Yuanjie

mmutuyu
mmutuyu 于 1 年前

yourenme

lunaticf
lunaticf 于 1 年前

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

lunaticf
lunaticf 于 1 年前

hbs.registerPartials is not a function?

marcttt
marcttt 于 1 年前

点击注册按钮后,返回错误页,状态码为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 于 1 年前

Image

Danielle
Danielle 于 1 年前

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

错别字。。

Yuanjie
Yuanjie 于 1 年前

user.js中没有数据库链接

mongoose.connect('mongodb://localhost/test');
Yuanjie
Yuanjie 于 1 年前

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

David
David 于 1 年前

修改了,谢谢grin

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

@Yuanjie

Yuanjie
Yuanjie 于 1 年前

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

cser
cser 于 1 年前

一起交流啊

cser
cser 于 1 年前

我在跟这个教程

dare21century
dare21century 于 1 年前

有一块学习的吗?

David
David 于 1 年前

@React_react-router 改过来了,谢谢

React_react-router
React_react-router 于 1 年前
app.listen(1337, funcion(){
    console.log('Example app listening on port 1337!');
});

function少了个t

David
David 于 1 年前

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

@wangxu88323

再点击一次就收回去了

wangxu88323
wangxu88323 于 1 年前

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

wangxu88323
wangxu88323 于 1 年前
app.use(session(session({secret: 'hello! TMY', resave: true, saveUninitialized: true})));

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

wangxu88323
wangxu88323 于 1 年前

@Harttle

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

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

wangxu88323
wangxu88323 于 1 年前

@Harttle

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

wanqingfengtao
wanqingfengtao 于 1 年前

这个图片好眼熟!

Harttle
Harttle 于 1 年前

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

Harttle
Harttle 于 1 年前

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

wangxu88323
wangxu88323 于 1 年前

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

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

wangxu88323
wangxu88323 于 1 年前

TypeError: Cannot read property 'username' of undefined

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

pray请求帮助

wangxu88323
wangxu88323 于 1 年前

@Cliff

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

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

joy

Cliff
Cliff 于 1 年前

@wangxu88323

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


var hbs = require('express-hbs');
app.engine('hbs', hbs.express4());
wangxu88323
wangxu88323 于 1 年前

@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 于 1 年前

@wangxu88323 

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

$ npm install express-hbs --save
wangxu88323
wangxu88323 于 1 年前

Cannot find module 'hbs'

zyxsxqs
zyxsxqs 于 1 年前

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

var html = fs.readFileSync(__dirname + '/index.html');
天码君
天码君 于 1 年前

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

我就是我
我就是我 于 1 年前

gulp那章为什么啥也没有

David
David 于 1 年前

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

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

:)

littlefour
littlefour 于 1 年前

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

secret option required for sessions

的问题。

Clipboard Image.png

provision
provision 于 2 年前

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

qiyan147
qiyan147 于 2 年前

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

颜卿今天Coding了吗

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

同学们就跟着抄了

颜卿今天Coding了吗

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

Harttle
Harttle 于 2 年前

@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 于 2 年前

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

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

Toder
Toder 于 2 年前

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

Harttle
Harttle 于 2 年前

@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 于 2 年前

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

老师能不能大致说一下

lx_space
lx_space 于 2 年前

高级JavaScript 语言

二豆子
二豆子 于 2 年前

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

这个js代码 咋写?

Harttle
Harttle 于 2 年前

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

li{
  text-align: center;
}
且听风铃
且听风铃 于 2 年前

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

```

```

Harttle
Harttle 于 2 年前

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

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

Harttle
Harttle 于 2 年前

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

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

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

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

阿钰
阿钰 于 2 年前

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

上吧,皮卡丘
上吧,皮卡丘 于 2 年前

同是小白,多多指教

大白
大白 于 2 年前

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

咨询老师