zoukankan      html  css  js  c++  java
  • 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})
    }));
    
     1 {
     2   "name": "appName",
     3   "version": "0.0.1",
     4   "private": true,
     5   "scripts": {
     6     "start": "node ./bin/www"
     7   },
     8   "dependencies": {
     9     "express": "~4.2.0",
    10     "static-favicon": "~1.0.0",
    11     "morgan": "~1.0.0",
    12     "cookie-parser": "~1.0.1",
    13     "body-parser": "~1.0.0",
    14     "mongodb": "*",
    15     "express-useragent": "*",
    16     "connect": "*",
    17     "cookie-session": "*",
    18     "cookies": "*",
    19     "express-session": "~1.0.4"
    20   }
    21 }

    3、前端ejs页面访问session中内容

    在app.js中插入如下代码:(在express早期版本中为helper,dynamicHelpers),注意下面代码要放在路由之前,否则不识别其中的变量

     1 app.use(function(req,res,next){  
     2     // res.locals.user = req.session ? req.session.user:'';  
     3     // res.locals.keyword = req.session ? req.session.keyword:'';  
     4 
     5     res.locals.user = req.session.user;
     6     res.locals.post = req.session.post;
     7     var error = req.flash('error');
     8     res.locals.error = error.length ? error : '';
     9     
    10     var success = req.flash('success');
    11     res.locals.success = success.length ? success : '';
    12     next();  
    13   });  

    后端代码如下,

    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后使用的话,需要单独安装,并引入。

  • 相关阅读:
    使用.Net Core+IView+Vue集成上传图片功能
    Vue基于vue-quill-editor富文本编辑器使用心得
    Fiddler原理~知多少?
    ASP.NET Core WebApi中简单像素转换跟踪实现
    利用SQL Profiler 追踪数据库操作
    ASP.NET Core Web API 版本控制
    处理SQL Server中的重复行
    【3分钟就会系列】使用Ocelot+Consul搭建微服务吧!
    ASP.NET Core WebAPI控制器返回类型的最佳选项
    花10分钟搞懂开源框架吧
  • 原文地址:https://www.cnblogs.com/mebius4789/p/5040736.html
Copyright © 2011-2022 走看看