Nodejs使用实例——网站登录验证

news/2024/5/20 15:48:05/文章来源:https://blog.csdn.net/Nature_Day/article/details/44488249

JS是脚本语言,脚本语言都需要一个解析器才能运行。对于写在HTML页面里的JS,浏览器充当了解析器的角色。而对于需要独立运行的JS,NodeJS就是一个解析器。每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许JS使用运行环境提供的内置对象和方法做一些事情。例如运行在浏览器中的JS的用途是操作DOM,浏览器就提供了document之类的内置对象。而运行在NodeJS中的JS的用途是操作磁盘文件或搭建HTTP服务器,NodeJS就相应提供了fs、http等内置对象。Express作为NodeJS的Web应用框架,可以帮助我们快速开发Web网站。

  开发环境

  • NodeJS:v0.10.30
  • npm:1.4.21
  • OS:Win7旗舰版 32bit
  • Express:4.2.0
  • MongoDB:2.6.3
    E:\project> node -v
    v0.10.30
    E:\project> npm -v
    1.4.21
    E:\project> express -V
    4.2.0

      1、建立工程

      使用express命令建立工程,并支持ejs:

    E:\project> express -e nodejs-democreate : nodejs-democreate : nodejs-demo/package.jsoncreate : nodejs-demo/app.jscreate : nodejs-demo/publiccreate : nodejs-demo/public/javascriptscreate : nodejs-demo/public/imagescreate : nodejs-demo/public/stylesheetscreate : nodejs-demo/public/stylesheets/style.csscreate : nodejs-demo/routescreate : nodejs-demo/routes/index.jscreate : nodejs-demo/routes/users.jscreate : nodejs-demo/viewscreate : nodejs-demo/views/index.ejscreate : nodejs-demo/views/error.ejscreate : nodejs-demo/bincreate : nodejs-demo/bin/wwwinstall dependencies:$ cd nodejs-demo && npm installrun the app:$ DEBUG=nodejs-demo ./bin/wwwE:\project>

      根据提示下载依赖包:

    E:\project> cd .\nodejs-demo
    E:\project\nodejs-demo> npm install
    npm WARN deprecated static-favicon@1.0.2: use serve-favicon module
    static-favicon@1.0.2 node_modules\static-favicondebug@0.7.4 node_modules\debugejs@0.8.8 node_modules\ejscookie-parser@1.0.1 node_modules\cookie-parser
    ├── cookie-signature@1.0.3
    └── cookie@0.1.0morgan@1.0.1 node_modules\morgan
    └── bytes@0.3.0body-parser@1.0.2 node_modules\body-parser
    ├── qs@0.6.6
    ├── raw-body@1.1.7 (bytes@1.0.0, string_decoder@0.10.25-1)
    └── type-is@1.1.0 (mime@1.2.11)express@4.2.0 node_modules\express
    ├── parseurl@1.0.1
    ├── utils-merge@1.0.0
    ├── cookie@0.1.2
    ├── merge-descriptors@0.0.2
    ├── escape-html@1.0.1
    ├── range-parser@1.0.0
    ├── fresh@0.2.2
    ├── cookie-signature@1.0.3
    ├── debug@0.8.1
    ├── methods@1.0.0
    ├── buffer-crc32@0.2.1
    ├── serve-static@1.1.0
    ├── path-to-regexp@0.1.2
    ├── qs@0.6.6
    ├── send@0.3.0 (debug@0.8.0, mime@1.2.11)
    ├── accepts@1.0.1 (negotiator@0.4.7, mime@1.2.11)
    └── type-is@1.1.0 (mime@1.2.11)
    E:\project\nodejs-demo>

      工程建立成功,启动服务:

    E:\project\nodejs-demo> npm start> nodejs-demo@0.0.1 start E:\project\nodejs-demo
    > node ./bin/www

      本地3000端口被打开,在浏览器地址栏输入localhost:3000,访问成功。

      2、目录结构

  • bin??存放命令行程序。
  • node_modules??存放所有的项目依赖库。
  • public??存放静态文件,包括css、js、img等。
  • routes??存放路由文件。
  • views??存放页面文件(ejs模板)。
  • app.js??程序启动文件。
  • package.json??项目依赖配置及开发者信息。
    E:\project\nodejs-demo> dir目录: E:\project\nodejs-demoMode                LastWriteTime     Length Name
    ----                -------------     ------ ----
    d----         2014/8/16     21:55            bin
    d----         2014/8/16     22:03            node_modules
    d----         2014/8/16     21:55            public
    d----         2014/8/16     21:55            routes
    d----         2014/8/16     21:55            views
    -a---         2014/8/16     21:55       1375 app.js
    -a---         2014/8/16     21:55        327 package.json
    

      3、Express配置文件

      打开app.js:

     1 var express = require('express');2 var path = require('path');3 var favicon = require('static-favicon');4 var logger = require('morgan');5 var cookieParser = require('cookie-parser');6 var bodyParser = require('body-parser');7 8 var routes = require('./routes/index');9 var users = require('./routes/users');
    10 
    11 var app = express();
    12 
    13 // view engine setup
    14 app.set('views', path.join(__dirname, 'views'));
    15 app.set('view engine', 'ejs');
    16 
    17 app.use(favicon());
    18 app.use(logger('dev'));
    19 app.use(bodyParser.json());
    20 app.use(bodyParser.urlencoded());
    21 app.use(cookieParser());
    22 app.use(express.static(path.join(__dirname, 'public')));
    23 
    24 app.use('/', routes);
    25 app.use('/users', users);
    26 
    27 /// catch 404 and forward to error handler
    28 app.use(function(req, res, next) {
    29     var err = new Error('Not Found');
    30     err.status = 404;
    31     next(err);
    32 });
    33 
    34 /// error handlers
    35 
    36 // development error handler
    37 // will print stacktrace
    38 if (app.get('env') === 'development') {
    39     app.use(function(err, req, res, next) {
    40         res.status(err.status || 500);
    41         res.render('error', {
    42             message: err.message,
    43             error: err
    44         });
    45     });
    46 }
    47 
    48 // production error handler
    49 // no stacktraces leaked to user
    50 app.use(function(err, req, res, next) {
    51     res.status(err.status || 500);
    52     res.render('error', {
    53         message: err.message,
    54         error: {}
    55     });
    56 });
    57 
    58 
    59 module.exports = app;

      4、Ejs模板

      修改app.js,让ejs模板文件使用扩展名为html的文件:

    13 // view engine setup
    14 app.set('views', path.join(__dirname, 'views'));
    15 //app.set('view engine', 'ejs');
    16 app.engine('html', require('ejs').renderFile);
    17 app.set('view engine', 'html');

      修改完成后,重命名views/index.ejs为views/index.html。重启服务,访问成功。

      5、安装常用库及页面分离

      添加bootstrap和jQuery:

    E:\project\nodejs-demo> npm install bootstrap
    bootstrap@3.2.0 node_modules\bootstrap
    E:\project\nodejs-demo> npm install jquery
    jquery@2.1.1 node_modules\jquery
    E:\project\nodejs-demo>

      接下来,把index.html分成三个部分:

  • header.html??页面头部区域。
  • index.html??页面内容区域。
  • footer.html??页面底部区域。

      header.html

    1 <!DOCTYPE html>
    2 <html lang="en">
    3 <head>
    4     <meta charset="utf-8">
    5     <title><%= title %></title>
    6     <!-- Bootstrap -->
    7     <link href="/stylesheets/bootstrap.min.css" rel="stylesheet" media="screen">
    8 </head>
    9 <body screen_capture_injected="true">

      index.html

    1 <% include header.html %>
    2 <h1><%= title %></h1>
    3 <p>Welcome to <%= title %></p>
    4 <% include footer.html %>

      footer.html

    1     <script src="/javascripts/jquery.min.js"></script>
    2     <script src="/javascripts/bootstrap.min.js"></script>
    3 </body>
    4 </html>

      重启服务,访问成功。

      6、路由

      登录设计:

    访问路径 页面 描述
    / index.html 不需要登录,可以直接访问。
    /home home.html 必须用户登录以后,才可以访问。
    /login login.html 登录页面,用户名密码输入正确,自动跳转到home.html。
    /logout 退出登录后,自动跳转到index.html。

      打开app.js文件,增加路由配置:

    26 app.use('/', routes);
    27 app.use('/users', users);
    28 app.use('/login', routes);
    29 app.use('/logout', routes);
    30 app.use('/home', routes);

      打开routes/index.js文件,添加对应方法:

     1 var express = require('express');2 var router = express.Router();3 4 /* GET home page. */5 router.get('/', function(req, res) {6   res.render('index', { title: 'Express' });7 });8 9 router.route('/login')
    10 .get(function(req, res) {
    11     res.render('login', { title: '用户登录' });
    12 })
    13 .post(function(req, res) {
    14     var user={
    15         username: 'admin',
    16         password: '123456'
    17     }
    18     if(req.body.username === user.username && req.body.password === user.password){
    19         res.redirect('/home');
    20     }
    21     res.redirect('/login');
    22 });
    23 
    24 router.get('/logout', function(req, res) {
    25     res.redirect('/');
    26 });
    27 
    28 router.get('/home', function(req, res) {
    29     var user={
    30         username:'admin',
    31         password:'123456'
    32     }
    33     res.render('home', { title: 'Home', user: user });
    34 });
    35 
    36 module.exports = router;

      创建views/login.html和views/home.html两个文件:

      login.html

     1 <% include header.html %>2 <div class="container">3     <form class="col-sm-offset-4 col-sm-4 form-horizontal" role="form" method="post">4         <fieldset>5             <legend>用户登录</legend>6             <div class="form-group">7                 <label class="col-sm-3 control-label" for="username">用户名</label>8                 <div class="col-sm-9">9                     <input type="text" class="form-control" id="username" name="username" placeholder="用户名" required>
    10                 </div>
    11             </div>
    12             <div class="form-group">
    13                 <label class="col-sm-3 control-label" for="password">密码</label>
    14                 <div class="col-sm-9">
    15                     <input type="password" class="form-control" id="password" name="password" placeholder="密码" required>
    16                 </div>
    17             </div>
    18             <div class="form-group">
    19                 <div class="col-sm-offset-3 col-sm-9">
    20                     <button type="submit" class="btn btn-primary">登录</button>
    21                 </div>
    22             </div>
    23         </fieldset>
    24     </form>
    25 </div>
    26 <% include footer.html %>

      home.html

    1 <% include header.html %>
    2 <h1>Welcome <%= user.username %>, 欢迎登录!!</h1>
    3 <a class="btn" href="/logout">退出</a>
    4 <% include footer.html %>

      修改index.html,增加登录链接:

    1 <% include header.html %>
    2     <h1>Welcome to <%= title %></h1>
    3     <p><a href="/login">登录</a></p>
    4 <% include footer.html %>

      路由及页面已准备好,重启服务,访问成功。

      7、session

      安装中间件express-session:

    E:\project\nodejs-demo> npm install express-session
    express-session@1.7.5 node_modules\express-session
    ├── cookie@0.1.2
    ├── cookie-signature@1.0.4
    ├── on-headers@1.0.0
    ├── utils-merge@1.0.0
    ├── parseurl@1.3.0
    ├── buffer-crc32@0.2.3
    ├── depd@0.4.4
    ├── debug@1.0.4 (ms@0.6.2)
    └── uid-safe@1.0.1 (base64-url@1.0.0, mz@1.0.0)
    E:\project\nodejs-demo>

      安装中间件connect-mongodb:

    E:\project\nodejs-demo> npm install connect-mongodb
    \> kerberos@0.0.3 install E:\project\nodejs-demo\node_modules\connect-mongodb\nod
    e_modules\mongodb\node_modules\kerberos
    > (node-gyp rebuild 2> builderror.log) || (exit 0)|
    E:\project\nodejs-demo\node_modules\connect-mongodb\node_modules\mongodb\node_mo
    dules\kerberos>node "C:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin\\
    ..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild
    |
    > bson@0.2.11 install E:\project\nodejs-demo\node_modules\connect-mongodb\node_m
    odules\mongodb\node_modules\bson
    > (node-gyp rebuild 2> builderror.log) || (exit 0)E:\project\nodejs-demo\node_modules\connect-mongodb\node_modules\mongodb\node_mo
    dules\bson>node "C:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\.
    .\node_modules\node-gyp\bin\node-gyp.js" rebuild
    connect-mongodb@1.1.5 node_modules\connect-mongodb
    ├── connect@1.9.2 (mime@1.2.11, formidable@1.0.15, qs@1.2.2)
    └── mongodb@1.4.8 (kerberos@0.0.3, readable-stream@1.0.27-1, bson@0.2.11)
    E:\project\nodejs-demo>

      安装中间件mongodb:

    E:\project\nodejs-demo> npm install mongodb
    -> kerberos@0.0.3 install E:\project\nodejs-demo\node_modules\mongodb\node_module
    s\kerberos
    > (node-gyp rebuild 2> builderror.log) || (exit 0)-
    E:\project\nodejs-demo\node_modules\mongodb\node_modules\kerberos>node "C:\Progr
    am Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\b
    in\node-gyp.js" rebuild
    |
    > bson@0.2.11 install E:\project\nodejs-demo\node_modules\mongodb\node_modules\b
    son
    > (node-gyp rebuild 2> builderror.log) || (exit 0)E:\project\nodejs-demo\node_modules\mongodb\node_modules\bson>node "C:\Program F
    iles\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\n
    ode-gyp.js" rebuild
    mongodb@1.4.8 node_modules\mongodb
    ├── kerberos@0.0.3
    ├── readable-stream@1.0.27-1 (isarray@0.0.1, string_decoder@0.10.25-1, inheri
    ts@2.0.1, core-util-is@1.0.1)
    └── bson@0.2.11 (nan@1.2.0)
    E:\project\nodejs-demo>

      添加database/settings.js和database/msession.js这两个文件:

      settings.js

    1 module.exports = {
    2     COOKIE_SECRET: 'ywang1724.com', 
    3     URL: 'mongodb://127.0.0.1:27017/nodedb',
    4     DB: 'nodedb', 
    5     HOST: '127.0.0.1',
    6     PORT: 27017,
    7     USERNAME: 'admin',
    8     PASSWORD: '123456'
    9 };

      msession.js

    1 var Settings = require('./settings');
    2 var Db = require('mongodb').Db;
    3 var Server = require('mongodb').Server; 
    4 var db = new Db(Settings.DB, new Server(Settings.HOST, Settings.PORT, {auto_reconnect:true, native_parser: true}),{safe: false});
    5 
    6 module.exports = db;

      修改app.js文件:

     1 var express = require('express');2 var path = require('path');3 var favicon = require('static-favicon');4 var logger = require('morgan');5 var cookieParser = require('cookie-parser');6 var bodyParser = require('body-parser');7 8 //采用connect-mongodb中间件作为Session存储  9 var session = require('express-session');  
    10 var Settings = require('./database/settings');  
    11 var MongoStore = require('connect-mongodb');  
    12 var db = require('./database/msession'); 
    13 
    14 var routes = require('./routes/index');
    15 var users = require('./routes/users');
    16 
    17 var app = express();
    18 
    19 // view engine setup
    20 app.set('views', path.join(__dirname, 'views'));
    21 //app.set('view engine', 'ejs');
    22 app.engine('html', require('ejs').renderFile);
    23 app.set('view engine', 'html');
    24 
    25 app.use(favicon());
    26 app.use(logger('dev'));
    27 app.use(bodyParser.json());
    28 app.use(bodyParser.urlencoded());
    29 app.use(cookieParser());
    30 //session配置
    31 app.use(session({
    32     cookie: { maxAge: 600000 },
    33     secret: Settings.COOKIE_SECRET,
    34     store: new MongoStore({  
    35         username: Settings.USERNAME,
    36         password: Settings.PASSWORD,
    37         url: Settings.URL,
    38         db: db})
    39 }))
    40 app.use(function(req, res, next){
    41     res.locals.user = req.session.user;
    42     next();
    43 });
    44 
    45 app.use(express.static(path.join(__dirname, 'public')));
    46 
    47 ......

      修改index.js文件:

     1 var express = require('express');2 var router = express.Router();3 4 /* GET home page. */5 router.get('/', function(req, res) {6     res.render('index', { title: 'Express' });7 });8 9 router.route('/login')
    10 .get(function(req, res) {
    11     res.render('login', { title: '用户登录' });
    12 })
    13 .post(function(req, res) {
    14     var user = {
    15         username: 'admin',
    16         password: '123456'
    17     }
    18     if(req.body.username === user.username && req.body.password === user.password){
    19         req.session.user = user;
    20         res.redirect('/home');
    21     } else {
    22         res.redirect('/login');
    23     }
    24 });
    25 
    26 router.get('/logout', function(req, res) {
    27     req.session.user = null;
    28     res.redirect('/');
    29 });
    30 
    31 router.get('/home', function(req, res) {
    32     res.render('home', { title: 'Home' });
    33 });
    34 
    35 module.exports = router;

      本地安装数据库MongoDB,新建用户nodedb。重启服务,访问成功。

      8、页面访问控制及提示

      访问控制设计:

    访问路径 描述
    / 任何人都可以访问,不需要认证。
    /home 拦截get请求,调用authentication()进行认证,不通过则自动跳转到登录页面。
    /login 任何人都可以访问,不需要认证。
    /logout 任何人都可以访问,不需要认证。

      修改index.js文件:

    34 router.get('/home', function(req, res) {
    35     authentication(req, res);
    36     res.render('home', { title: 'Home' });
    37 });
    38 
    39 function authentication(req, res) {
    40     if (!req.session.user) {
    41         return res.redirect('/login');
    42     }
    43 }

      重启服务,访问成功。

      添加页面提示,修改app.js文件,增加res.locals.message:

    40 app.use(function(req, res, next) {
    41     res.locals.user = req.session.user;
    42     var err = req.session.error;
    43     delete req.session.error;
    44     res.locals.message = '';
    45     if (err) {
    46         res.locals.message = '<div class="alert alert-warning">' + err + '</div>';
    47     }
    48     next();
    49 });

      修改index.js文件,增加req.session.error:

     1 var express = require('express');2 var router = express.Router();3 4 /* GET home page. */5 router.get('/', function(req, res) {6     res.render('index', { title: 'Express' });7 });8 9 router.route('/login')
    10 .get(function(req, res) {
    11     if (req.session.user) {
    12         res.redirect('/home');
    13     }
    14     res.render('login', { title: '用户登录' });
    15 })
    16 .post(function(req, res) {
    17     var user = {
    18         username: 'admin',
    19         password: '123456'
    20     }
    21     if (req.body.username === user.username && req.body.password === user.password) {
    22         req.session.user = user;
    23         res.redirect('/home');
    24     } else {
    25         req.session.error='用户名或密码不正确';
    26         res.redirect('/login');
    27     }
    28 });
    29 
    30 router.get('/logout', function(req, res) {
    31     req.session.user = null;
    32     res.redirect('/');
    33 });
    34 
    35 router.get('/home', function(req, res) {
    36     authentication(req, res);
    37     res.render('home', { title: 'Home' });
    38 });
    39 
    40 function authentication(req, res) {
    41     if (!req.session.user) {
    42         req.session.error='请先登录';
    43         return res.redirect('/login');
    44     }
    45 }
    46 
    47 module.exports = router;

      修改login.html,增加<%- message %>:

    5 <legend>用户登录</legend>
    6 <%- message %>
    7 <div class="form-group">

      重启服务,访问成功。输入错误用户名密码:

    web,网站,笔记,开发,学习0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_841223.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tm是什么域名_关于网站收录排名那些事-你的网站为什么不被收录?

网站做好后&#xff0c;一定会有一个疑问&#xff0c;网站如何才让百度收录&#xff0c;别人可以在百度搜索到你的网站呢&#xff1f;本文就来跟大家聊五毛钱的关于网站收录那些事。温馨提示:本文介绍的这些内容只是加快网站被搜索引擎收录&#xff0c;你不做&#xff0c;早晚也…

java搭建云手机,使用华为云服务器搭建一个简单网站(内容全面)

一、购买服务器因为遇上华为云服务器打折活动&#xff0c;因此就买了一年的华为云服务器。购买过程如下&#xff1a;首先是去华为云官网注册账号&#xff0c;如果是学生进行学生认证&#xff0c;然后搜索“学生套餐”&#xff0c;点击“参与”就会出现一下界面&#xff1a;按自…

Asp.net网站开发(一)LINQ TO SQL 之动态数据支持

LinQ to SQL动态数据支持 动态数据支持&#xff0c;它允许开发人员不用编写一行代码就可以快速的创建使用linq to sql对象模型的数据驱动网站。 创建方法&#xff1a; 1. 创建asp.net Dynamic data站点 新建项目——web——asp.net Dynamic data LINQ TO SQl 应用程序——…

Asp.net网站开发(一)LINQ TO SQL 之八大字句

1. from in子句&#xff1a;指定查询操作的数据源和变量范围//创建LinqDB数据库上下文实例DataClasses1DataContext db new DataClasses1DataContext();//使用lINQ查询表达式查询数据var query from stu in db.studentjoin m in db.mark on stu.sid equals m.sidsele…

Asp.net网站开发(二)HttpHandler

模版和处理程序 封面数字水印&#xff1a;运用httphandler技术 封面数字水印的实现&#xff1a; 1.创建一个Ihttphandler的类Handler12.在Handler1中写代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO; using Sys…

Asp.net网站开发(二)用户控件

用户控件 定义&#xff1a; 在 ASP.NET 中&#xff1a;使用与 ASP.NET 页相同的语法&#xff0c;以声明方式创作的服务器控件。该控件用 .ascx 扩展名保存为文本文件。用户控件允许对页功能进行分区和重用。第一次请求时&#xff0c;页框架立即将用户控件分析为从 System.Web.U…

Asp.net网站开发(一)LINQ TO SQL 之LINQ TO SQL类

datacontext类的方法 常用的方法&#xff1a; 执行sql命令的ExecuteQuery方法查询if(!IsPostBack){DataClasses1DataContext db new DataClasses1DataContext();string s "select * from student ";GridView1.DataSourcedb.ExecuteQuery<student>(s);GridVi…

Asp.net网站开发(三)成员资格和角色管理

成员资格管理 Membership类用于验证用户凭证并管理用户设置 Membership属性&#xff1a;ApplicationName获取或设置应用程序的名称。EnablePasswordReset获得一个值&#xff0c;指示当前成员资格提供程序是否配置为允许用户重置其密码。EnablePasswordRetrieval获得一个值&…

Asp.net网站开发(四)个性化用户设置

个性化用户设置 1.先新建一个网站&#xff0c;然后配置web.config文件<connectionStrings><add name"aspnetdbConnectionString" connectionString"Data Source.;Initial Catalogaspnetdb;Integrated SecurityTrue"providerName"System.Data…

微信公众号用户与网站用户的绑定方案

现在很多网站都已经建立了一套完整的用户账号体系&#xff0c;基于这套体系&#xff0c;再做其他应用的用户扩展就非常方便。例如&#xff0c;有了微软的outlook账户&#xff0c;就可以登录win8&#xff0c;可以登录微软的邮箱&#xff0c;还可以登录skype。同样地&#xff0c;…

为什么要把系统拆分成分布式的?为啥要用dubbo?_面向服务的分布式网站架构设计...

传统的架构但是如果要是有高并发的话&#xff0c;那么这样的架构就会出问题高并发的架构可以使用负载均衡的方式&#xff0c;设置一个负载均衡服务器&#xff0c;这个服务器根据不同tomcat服务器的压力来确定使用其中的一个服务器来处理用户请求&#xff0c;使得压力最小的处理…

html中使用什么标签做的导航栏_网站导航:7个最佳实践,设计技巧和警示

一些小的事物可以创造大的变化&#xff0c;网站导航栏就是一个很好的例子。导航的结构和标签可能会对结果产生巨大影响&#xff0c;原因如下&#xff1a;导航会影响流量&#xff1a;你的网站在搜索引擎中的排名高低会影响你从搜索中获得的流量量的多少导航会影响转化&#xff1…

seo按天扣费系统_SEO优化有哪些痛点?

大数据时代的到来&#xff0c;互联网的普及给企业带来了全新的营销模式&#xff0c;信息数据化的模式下&#xff0c;企业纷纷开拓线上业务&#xff0c;企业们都想在这个大市场上分得一杯羹&#xff0c;抢战先机那就得比别人先找对方法。对于企业来说SEO优化和全网推广是互联网推…

我的家乡网站_中国日记|电影《我和我的家乡》背后藏着哪些秘密

这个“十一”两节相逢&#xff0c;电影市场也热闹起来。一部《我和我的家乡》让观众笑泪齐飞&#xff0c;收获了久违的欢乐与感动。故乡今夜思千里&#xff0c;华灯璀璨待君归。《北京好人》《天上掉下个UFO》《最后一课》《回乡之路》《神笔马亮》——五个单元&#xff0c;五个…

php与mysql网站设计案例,基于Web的手工网站的设计与实现(PHP,MySQL)(含录像)

基于Web的手工网站的设计与实现(,MySQL)(含录像)(任务书,开题报告,毕业论文12500字,程序代码,MySQL数据库)系统功能需求概述手工材料网系统主要有六大模块&#xff1a;系统设置模块、分类管理模块、商品管理模块、订单管理模块、留言管理模块、分享管理模块。系统分为前台、后台…

javascript正则表达式判断文件夹名称是否有误_JavaScript网站开发——第三天

十二&#xff0c;DOM1&#xff0c;什么是DOMDOM全称 Document Object Model&#xff0c;即文档对象模型&#xff0c;它允许脚本(js)控制Web页面、窗口和文档。实现了JS可以通过操作BOM来实现浏览器的各种行为&#xff0c;起到了桥梁和结构的作用。做网页的都知道&#xff0c;想…

图片优化_网站优化如何对网站的图片进行优化

网站优化的方式多种多样&#xff0c;图片优化就是其中一种&#xff0c;好的图片可以给用户带来一定的视觉冲击力。很多网站管理员认为图片优化就只是上传一张图片而已&#xff0c;其实没有这么简单&#xff0c;从网站优化的角度来讲&#xff0c;除了要注意网站的大小、尺寸、清…

html权重值_网站内链及权重合理分配方法(一)

前面曾庆平SEO提到网站结构优化要解决的最重要的问题包括收录及页面权重分配。在理想情况下&#xff0c;经典的网站树形结构应该是比较好的链接及权重分配模式。但是由于不同网站采取的技术不同&#xff0c;要实现的功能、网站目标、重点要解决的营销问题都很可能不同&#xff…

用php开发网站要多久,php开发网站需要多久

php开发网站需要多久&#xff1f;网站的开发周期是根据客户对于网站功能的要求来定时间的&#xff0c;一般常规的企业站5-7天&#xff0c;商城或者有特殊要求的站时间是需要双方进行沟通确认来定的&#xff0c;大概需要二到三个月。php语言主要特点(一)开源性和免费性由于PHP的…

hbuilder简单网页模板_PageAdmin CMS仿站教程,自己建网站其实很简单

作为一个建站新手&#xff0c;经常看见别人的网站就觉得高大上&#xff0c;但是用网上下载的PageAdmin CMS模板&#xff0c;但是没有前端基础&#xff0c;所以又改不出我喜欢的样子&#xff0c;那怎么办呢&#xff1f;今天我们就来说说如何把你喜欢的网站仿制出来&#xff01;1…