node.js express开发web问题
1、新建的layout.ejs,在里面使用了<%= title %>,但是在运行时提示title is not defined。
将title改为<%= locals.title %>即可
2、在使用session进行连接mongodb数据库时,出现错误 (引用http://winfan.net/662.html)
Error: Most middleware (like session) is no longer bundled with Express and must be installed separately.
在express 4.0之前的版本,像session之类的中间件是伴随express自动安装的,网上有的教程使用的express版本正是4.0之前的版本,所以在使用4.0及其之后版本的时候一定要注意这点。
用的时候不在使用express.session,而是直接使用session():
app.use(session({
    secret:setting.cookieSecret,
    key:setting.db,
    cookie:{maxAge:1000*60*60*24*30},
    store:new MongoStore({db:setting.db})
}));
 {
   "name": "appName",
   "version": "0.0.1",
   "private": true,
   "scripts": {
     "start": "node ./bin/www"
   },
   "dependencies": {
     "express": "~4.2.0",
     "static-favicon": "~1.0.0",
     "morgan": "~1.0.0",
     "cookie-parser": "~1.0.1",
     "body-parser": "~1.0.0",
     "mongodb": "*",
     "express-useragent": "*",
     "connect": "*",
     "cookie-session": "*",
     "cookies": "*",
     "express-session": "~1.0.4"
   }
 }
3、前端ejs页面访问session中内容
在app.js中插入如下代码:(在express早期版本中为helper,dynamicHelpers),注意下面代码要放在路由之前,否则不识别其中的变量
 app.use(function(req,res,next){
     // res.locals.user = req.session ? req.session.user:'';
     // res.locals.keyword = req.session ? req.session.keyword:'';  
     res.locals.user = req.session.user;
     res.locals.post = req.session.post;
     var error = req.flash('error');
     res.locals.error = error.length ? error : '';
     var success = req.flash('success');
     res.locals.success = success.length ? success : '';
     next();
   });  
后端代码如下,
var newUser = new User({
  name: req.body.username,
  password: password,
});
//檢查用戶名是否已經存在
User.get(newUser.name, function(err, user) {
  if (user)
    err = 'Username already exists.';
  if (err) {
    // req.flash('error', err);
    console.log( err);
    return res.redirect('/reg');
  }
  //如果不存在則新增用戶
  newUser.save(function(err) {
    if (err) {
      // req.flash('error', err);
      req.session.error='用户不存在';
     console.log('error', err);
      return res.redirect('/reg');
    }
    req.session.user = newUser;
    // req.flash('success', '註冊成功');
    req.session.success='注册成功';
    console.log('注册成功');
    res.redirect('/');
  });
});
如果在前端ejs中访问User对象的name或password属性,可以使用<%= locals.user['name']%> <%= locals.user['password']%>
req.flash在express4.X后使用的话,需要单独安装,并引入。
node.js express开发web问题的更多相关文章
- 44.Node.js Express 框架--web框架
		
转自:http://www.runoob.com/nodejs/nodejs-express-framework.html Express 简介 Express 是一个简洁而灵活的 node.js W ...
 - 《Node.js+MongoDB+AngularJS Web开发》读书笔记及联想
		
总体介绍 <Node.js+MongoDB+AngularJS Web开发>,于2015年6月出版,是一本翻译过来的书,原书名为<Node.js,MongoDB and Angula ...
 - Node.js Express 框架学习
		
转载:http://JavaScript.ruanyifeng.com/nodejs/express.html#toc0 感觉很牛的样子,不过觉得对初学者没太大用,里面很多例子用的api都没有详细的说 ...
 - Node与express开发
		
1.初识Express Express 网站上是这样介绍 Express 的: "精简的.灵活的 Node.js Web 程序框架,为构建单页.多页及混合的 Web 程序提供了一系列健壮的功 ...
 - Nodejs学习笔记(六)--- Node.js + Express 构建网站预备知识
		
目录 前言 新建express项目并自定义路由规则 如何提取页面中的公共部分? 如何提交表单并接收参数? GET 方式 POST 方式 如何字符串加密? 如何使用session? 如何使用cookie ...
 - Node.js Express框架
		
Express 介绍 Express是一个最小的,灵活的Node.js Web应用程序框架,它提供了一套强大的功能来开发Web和移动应用程序. 它有助于基于Node Web应用程序的快速开发.下面是一 ...
 - Ubuntu 14.04下搭建Node.js的开发环境
		
最近想找一个轻量级且支持快速开发的服务开发平台,选来选去选择了Node.js,当时有几种选择: Python + Django(用过Django,虽然开发快速,但是感觉性能并不太好). Ruby + ...
 - Nodejs学习笔记(六)—Node.js + Express 构建网站预备知识
		
前言 前面经过五篇Node.js的学习,基本可以开始动手构建一个网站应用了,先用这一篇了解一些构建网站的知识! 主要是些基础的东西... 如何去创建路由规则.如何去提交表单并接收表单项的值.如何去给密 ...
 - node.js + express 初体验【hello world】
		
[node.js] 一个神奇的XX 呵呵 :) 不知道怎么形容他才好! [express] 是node.js 开发web应用程序的框架 开发环境:XP 大家共同进步吧 :) 一:前期准备: 1:下载 ...
 
随机推荐
- Windows 2019 下安装Oracle18c
			
1. 跟之前版本不一样 与linux 的版本一样 18c的DB 端的安装有区别. 首先需要 创建一个oracle的目录. 这里最简单的方法是 参照12c的目录来 创建 比如我创建的 然后将 db_ho ...
 - python进阶-虚拟环境
			
virtualenv # 安装 pip install virtualenv # 查看版本,确认安装完成 virtualenv --version # 创建虚拟环境 virtualenv my_env ...
 - 在vue中如何动态修改title标签的值
			
建议用vue-wechat-title插件为微信动态设置标题 1,首先安装插件 cnpm install vue-wechat-title --save 2,在main.js中引入 Vue.use(r ...
 - 使用 TListView 控件(4)
			
本例效果图: 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, ...
 - 使用ETL构建数据仓库的思考
			
使用ETL构建数据仓库的思考 背景:公司的数据仓库建设项目启动在即,所谓万事开头难,如何在我们数仓建设规划的前期做好业务数据准备和系统建设规划是我们需要思考的问题,这里根据之前的自己参与过的公司ODS ...
 - MT【194】又见和式变换
			
(2007浙江省赛B卷最后一题)设$\sum\limits_{i=1}^{n}{x_i}=1,x_i>0,$求证:$n\sum\limits_{i=1}^n{x_i^2}-\sum\limits ...
 - 【题解】 P1879  玉米田Corn Fields (动态规划,状态压缩)
			
题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ...
 - SpringBoot整合Mybatis之Annotation
			
首先需要下载前面一篇文章的代码,在前一章代码上进行修改. SpringBoot整合Mybatis(注解方式) 复制前一个项目,修改配置文件,mybatis的相关配置为: mybatis: type-a ...
 - 【洛谷P2696】慈善的约瑟夫
			
题解:根据<具体数学>上关于迭代约瑟夫问题性质的总结如下:多次迭代的约瑟夫问题的解具有循环移位性质,且答案最终会收敛到不动点处. 代码如下 #include<bits/stdc++. ...
 - 2017年8道php面试题(真题+答案)
			
1.<?php echo count(strlen(“http://php.net”)); ?>的执行结果是? 答案:1 .如果var是普通变量,则返回1.正常情况下返回var中的元素或属 ...