zoukankan      html  css  js  c++  java
  • node 问题

    安装:使用.msi直接安装就好,环境变量已经设置好了

    1、问题:验证node是否正确安装

    办法:直接计算1+1;创建服务器。

    在项目文件夹的路径下,输入node命令,会看到一个提示符,这里只能输入直接输出的语句,不能运行js文件。

    2、npm模块

    包管理器;一般都已经安装好了;可输入npm来验证;使用时:require;模块文档:npm docs XXX,npm bugs XXX,npm edit XXX。

    高阶:package.json.创建依赖关系,使用npm install一键安装所有的包,便于共享。 

    问题:安装时候会修改默认的路径,所以需要在此路径下(C:UsersAdministratorAppDataRoaming)新建一个npm文件,这样就可以正常运行npm命令了。

    3、输出和输出是不可预测的。想爬取页面的内容,但什么时候会返回什么内容是不能确定的。这里先不考虑顺序,返回内容的顺序并不重要。

    回调首先解决不可预测性的方法,其次也是处理并发的方法。

    异步并不是node或js特有的,而是一种编程风格。

    node几乎从不使用同步,而是异步的调用回调

    4、json和js对象字面量

    { "prop": "val" } 这样的声明有可能是JavaScript对象字面量也有可能是JSON字符串,取决于什么上下文使用它,如果是用在string上下文(用单引号或双引号引住,或者从text文件读取)的话,那它就是JSON字符串,如果是用在对象字面量上下文中,那它就是对象字面量。

    // 这是JSON字符串
    var foo = '{ "prop": "val" }';

    // 这是对象字面量
    var bar = { "prop": "val" };

    而且要注意,JSON有非常严格的语法,在string上下文里{ "prop": "val" } 是个合法的JSON,但{ prop: "val" }和{ 'prop': 'val' }确实不合法的。所有属性名称和它的值都必须用双引号引住,不能使用单引号。另外,即便你用了转义以后的单引号也是不合法的。--转自tom大叔的博客

    用引号引住,且内部用双引号的才是json,其他的一切都不是合法的json。

    5、http

    在同一台电脑上,建立web服务器,并建立客户端去访问,怎么实现不了呢?  应该可以

    使用writeHead方法可以返回响应头,可以了重定向。URL模块用来做路由。

    还可以创建http客户端。

    6、express的安装问题

    安装:npm install -g express

    需要安装命令工具:npm install -g express-generator;

    生成模板引擎为ejs的express项目:express -e  microblog

    ejs:app.engine('html', require('ejs').renderFile);    ejs模板扩展到.html文件,有问题还是要看官网!

    express4的启动方式:node bin/www; supervisor bin/www

    npm uninstall -g express  可以卸载某一模块;express -V  查看版本,要大写;安装依赖的包:npm install;启动:npm start.

    主要介绍了Jade的内容

    Jade:基于缩进:缩进不正确,可能会导致错误。作用:可以给HTML动态输入数据

    一行在上一行下面缩进,则认为它是上一行的子行;管道描述符:组织大的文本主体;

    使用Jade输出数据:变量,循环,条件,内联,包含,Minxin

    - 随后的代码应当被执行。 循环,if,else前不需要减号;如果user为变量,则p= user,若user为常量,则p user。

     内联:

    script 

      alert('add success');

    包含:

    body

      include includes/header.jade

    Mixin:重复某些代码块

    安装:npm -g install supervisor

    supervisor的启动方式supervisor bin/www,

    jade扩展到html文件:include content.html

    7、mongodb

    解压zip文件就ok了,新建data文件,打开时需要写--dbpath。

    mongoose提示找不到mongodb模块,是因为npm install没运行好,智能npm cache clean之后,再重装

    express in dependencies add:''mongodb":"*"   不能加逗号

    error connecting to database:failed to connect to [127.0.0.1:27017]:出现这个错误,是因为mongodb没有打开。是因为d/mongodb,应该是d:/mongodb

    EXPRESS MONGODB 搭建多人博客:

    碰到的问题:

    设置数据库路径并启动数据库:mongod -dbpath "d:/mongodb/blog":不能用‘’。

    是res.redirect(''/)而不是req.redirect('/')

    form一定要加method='post';

    mongod.exe的闪退:在mongodb的同级目录下,新建data/db,就ok了。

    切换数据库:use blog

    取出了数据库的所有信息:

    User.get=function get(username,callback){
        mongodb.open(function(err,db){
            if(err){
                return callback(err);
            }
    
            db.collection('users',function(err,collection){
                if(err){
                    mongodb.close();
                    return callback(err);
                }
                
                collection.find(function(err,doc){
                    doc.each(function(err,doc){
                        if(doc){
                            console.log('name:'+doc.name+';password:'+doc.password);
                        }
                    })
                });            
            });
        });
    };

    express jade:index.jade extends layout layout.jade

    updata form use PUT method

    req.flash 在3.x后都不支持了

    express的上传:

    1、

    app.use(express.bodyParser({uploadDir:'./uploads'}));   //指定上传地址

    <form method="post" enctype="multipart/form-data" action="/file-upload">
      <input type="file" name="thumbnail">
      <input type="submit">
    </form>
    
    app.post('/file-upload', function(req, res, next) {
      console.log(req.body);
      console.log(req.files);
    });
    

      

    要先在根目录下新建uploads文件。重命名:

    app.post('/file-upload',function(req,res,next){
    			var tmp_path=req.files.thumbnail.path;
    			var target_path='./public/images/'+req.files.thumbnail.name;
    
    			fs.rename(tmp_path,target_path,function(err){
    				if(err) throw err;				
    			});
    
    			res.redirect('/');
    		})
    

    express中集成了formidable,所以一起用时会有问题。

    安装模块时,提示error ENOENT,Stat:只需要在提示路径下新建npm文件就可以。

    mkdir nodejs-connect && cd nodejs-connect:可以连起来写

    没有装npm install hiredis redis,但也能访问redis。

    直接启动redis客户端:redis_cli

    每个Redis元素有一个类型,如果这个Redis元素的类型是hash,那么就可以用hkeys找到他有哪些key

    data-query-params:
    function queryParams(params){
    params.searchText = 'test query';
    return params;
    }
    在server用req.query.searchText获取

    data-response-handler:
    function responseHandler(res) {
    console.log('keys:'+res.col);
    return res.child;
    }

    bootstrap table:load 是直接加载数据,refresh 一般用于从服务器中获取数据;刷新的话,会先消失,再重现,卡的动作很明显。silent: true,

    bootstrap table:在它的基础上,用其他插件实现reorder columns,不能成功的原因:jquery.sorttable.js:类库的版本要求低;由于bt会在th里加元素来调整字的位置。而jquery.sorttable.js要求th里面的div要和th同宽高。所以一直对不上。 

    卸载:直接删掉就好,nodejs

    20151003

    最近在做一个项目,自己主要做前端的,后端使用php,别人做的。自己把后端node实现了一遍。

    学到的东西:mysql,async等模块,MVC的实践;不足的地方:express-session一定要跟redis等数据库联系起来吗?MVC很多代码不知道怎么放更合理。

    接下来需要看看别人的项目:

    1、hi-cms:https://github.com/highsea/hi-cms  用的技术都一样,看一下别人怎么写的。

    2、开源CMS:https://git.oschina.net/doramart/DoraCMS

    3、网络平台:http://git.oschina.net/liweisadleader/CodeCraft

    4、cms:https://github.com/keystonejs/keystone

    hexo是神马东西?

    守护nodejs进程:在出错之后,如何处理

    1、子进程的方法

    var spawn = require('child_process').spawn;
    
    function start(){
      nw = spawn('supervisor bin/www');
      
      nw.on('close',function(code, signal){
        nw.kill(signal);
        nw = start();
      });
      nw.on('error',function(code, signal){
        nw.kill(signal);
        nw = start();
      });
      return nw;
    };
    
    start();
    

      

    配置文件 使用方式

    config.js

    module.exports={'a':1,'b':1}
    

    ​调用:

    var config=require('./config')

    post 传递对象数组
    前端
    var a = [
          {
            "name": 'name1',
            "age": 'age1'
          },
          {
            "name": 'name2',
            "age": 'age2'
          }
        ];
        $.post('/test', {
          post: JSON.stringify(a)
        }, function(data){
          debugger
        })
    

    后端

    router.post('/test', function(req, res, next) {
      console.log('/test');
    
      var a = JSON.parse(req.body.post);
    
      console.log(util.inspect({a: a}));
    
      res.send({
        path: '/test'
      })
    });
    

    如果不这样做的话,很容易出现 'post[0][name]': 'name1',这种情况 

    post传递json

    json

    {
          "Email": "sfpeng@163.com",
          "Password": "123456"
        }
    

    以string传递,同域和跨域都一样

    $.post('/test', {
          post: JSON.stringify(a)
        }, function(data){
          debugger
        })
    

    以json传递

    同域

    $.ajaxSetup({
          contentType: "application/json; charset=utf-8"
        });
    
        $.post('/test', JSON.stringify(a), function(data){
          debugger
        }); 
    

    跨域 现在有点问题,server需要验证header method:https://segmentfault.com/a/1190000000709909 不是那么简单的请求

    $.ajaxSetup({
          contentType: "application/json; charset=utf-8"
        });
    
        $.post('/test', JSON.stringify(a), function(data){
          debugger
        }); 
    

    server

    app.use(function(req, res, next){
      res.header('Access-Control-Allow-Origin', "*");
      res.header('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE');
      res.header('Access-Control-Allow-Headers', 'Content-Type');
      next();
    });
    

    有一次:访问另一个网站的json数据,通过这种方式还是没法跨域,只能提供接口之后,才成功访问

      

    gulp不是内部或外部命令

    一种原因是,环境变量没有添加,需要添加 c:/users/administrator/appdata/roaming/npm

    另一种原因是,gulp没有正确安装。把gulp全局和局部安装一下。  

    n 模块 管理nodejs版本:http://www.jianshu.com/p/cfdfd3d04215

    升级到最新版 n stable

    升级到指定版 n v0.12.2

    mac 上这个模块是正常的;pc 上使用有问题。 

    退出,两种情况:

    1、ctrl+z,需要kill进程

    2、ctrl+c,不需要kill进程 

    错误处理

    if(err){
        res.json({
          msg: 'error'
        });
        return;
      }
    

      

    中间件存在的问题:

    每用过一个中间件,都是把用法记录下来。但是下次用时,可能会是不同的版本,用法也有不同  

      

    module.exports exports的区别

    https://cnodejs.org/topic/52308842101e574521c16e06

    模块名跟项目名 不能相同

    测试

    packages.json  

       "chai": "^3.5.0",
        "istanbul": "^0.4.5",
        "mocha": "^3.2.0",
        "mocha-phantomjs": "^4.1.0",
        "should": "^11.1.2",
        "supertest": "^2.0.1"
    

    /test

      mocha init f2e

    Makefile

    命令以tab开头 

    在跟目录下执行make test 

    test:
    	./node_modules/.bin/mocha
    
    cov test-cov:
    	./node_modules/.bin/istanbul cover _mocha
    
    .PHONY: test cov test-cov
    

     

    app.locals 设置模板全局常量

    res.locals 添加模板必需的三个变量

    中间件

      写一个公用的函数,可以经常调用 

    nvm  

      切换nodejs版本

      已安装

      nvm ls

      nvm use 0.12

    nrm 

      管理npm源的工具

      nrm ls

      nrm use cnpm

    require

      同步

      判断是否是程序的入口文件 require.main === module

      循环引用 以后注意下 

    npm config set save-exact true,这样每次 npm i xxx --save 的时候会锁定依赖的版本号,相当于加了 --save-exact 参数。 

    使用npm shrinkwrap锁死依赖版本号

    通过运行 npm shrinkwrap,会在当前目录下产生一个 npm-shrinkwrap.json,里面包含了通过 node_modules 计算出的模块的依赖树及版本。

    --save 加入依赖

    --save-dev 加入开发依赖

  • 相关阅读:
    Django组件——分页器
    Django与Ajax
    Python常用模块——包&跨模块代码调用
    Python常用模块——正则表达式re模块
    Python常用模块——文件复制模块shutil
    Python常用模块——hashlib加密
    git小乌龟配置
    设计模式学习(27)- MVC模式
    设计模式学习(26)- 访问者模式
    设计模式学习(25)- 模板模式
  • 原文地址:https://www.cnblogs.com/wang-jing/p/3948984.html
Copyright © 2011-2022 走看看