zoukankan      html  css  js  c++  java
  • node.js 最常用技术总结

    1、跨域问题
    如果发出ajax请求的页面比如(index.html)和提供http server的文件比如(http.js)不在同一个域名或者端口或者http协议不同,都会产生跨域的问题,根本原因就是浏览器同源策略。

    解决方案,CORS,第一种情况,简单请求比如没有参数提交,没有自定义请求头文件。这样可以,添加代码
    res.setHeader("Access-Control-Allow-Origin", "http://localhost:3001");
    res.setHeader("Access-Control-Allow-Credentials", "true");
    res.end(JSON.stringify([{ name: "tom", age: 20 }]));
    加入http://localhost:3001这个请求地址,成为一个白名单成员,允许它请求数据。
    第二种情况:修改了请求头,就不是简单请求,这时候可以这样设置。
    else if (method == "OPTIONS" && url == "/users") {
    res.writeHead(200, {
    "Access-Control-Allow-Origin": "http://localhost:3001",
    "Access-Control-Allow-Headers": "X-Token,Content-Type",
    "Access-Control-Allow-Methods": "GET,POST,PUT",
    "Access-Control-Allow-Credentials": "true"
    });
    res.end();
    }
    2、mongodb在命令行下使用起来不方便,一般我们要做成nodejs下的原生驱动。像写nodejs一样来操作const MongoClient = require("mongodb").MongoClient;
    3、用mongodb先要在cmd中,mongod --dbpath D:date 开机,data文件夹自己手动创建在D盘根目录

    4、req.body是post 方式提交请求时传入的参数,可以通过const bodyParser = require('body-parser');
    app.use(bodyParser.json());
    如果用koa开发的话,引入const bodyparser = require('koa-bodyparser');
    app.use(bodyparser())

    5、req.query是ajax请求时提交的查询参,如下req.query=={ page : 3 }
    app.get('/api/list/:id',(req,res)=>{})
    axios .get('/api/list/8?page=3')

    6、req.params是ajax请求时提交的虚拟参,如下req.params=={ id: 8 }
    app.get('/api/list/:id',(req,res)=>{})
    axios .get('/api/list/8?page=3')

    7、req.url是ajax请求时提交的url地址,如下req.url== '/api/list/6?page=1'
    axios .get('/api/list/6?page=1')

    7、req.path是ajax请求时提交的url地址中去掉查询参的部分,如下req.path== '/api/list/6'
    axios .get('/api/list/6?page=1')

    8、需要安装的模块
    npm install nodemon -g
    npm install express --save
    npm install koa --save
    npm install mongodb --save
    npm install mongoose --save
    npm install body-parser --save
    npm install koa-bodyparser --save
    npm install koa-router --save
    npm install koa-static --save
    npm install jsonwebtoken --save
    npm install sha1 --save
    npm install cookie-parser --save

    9、设置静态文件目录
    app.use(express.static('public')) // express

    const static = require('koa-static')
    app.use(static(path.join(__dirname+ '/public'))) // koa

    10、在node文件中拼地址
    const path = require('path')
    path.resolve(__dirname+'/public') // 相当于根目录下的/public

    11、mongoose写分页
    model.find({}).skip().limit()
    model是模型(集合的映射),skip的参数是从第几条开始查询,limit的参数是一页几条。
    例如:
    pageSize:10
    url : /list?page=3

    User.countDocuments({}, (error, count) => {
    if (error) {
    res.json({
    status: 400,
    msg: JSON.stringify(error)
    });
    } else {
    User.find({}).skip((req.query.page - 1) * pageSize).limit(pageSize).sort({ 'created': -1 }).exec((err, doc) => {
    if (err) {
    res.json({
    status: 400,
    msg: JSON.stringify(err)
    });
    } else {
    res.json({
    status: 200,
    result: doc, // doc就是从第20条到29条的一个数组
    total: count,
    msg:'OK'
    });
    }
    })
    }

    12、for...in循环是 遍历对象的每一个可枚举属性,包括原型链上面的可枚举属性,而Object.keys()只是遍历自身的可枚举属性,不可以遍历原型链上的可枚举属性. 这是for...in和Object.keys()的主要区别,而Object.getOwnPropertyNames()则是遍历自身所有属性(不论是否是可枚举的),不包括原型链上面的.

  • 相关阅读:
    一次linux启动故障记录
    linux 时间相关的一些总结
    linux 3.10 gro的理解和改进
    linux 3.10 的中断收包笔记
    一个有趣的nginx问题引发的小问题
    linux 3.10 tcp的accept测试
    linux mce的一些相关内容和用户态监控的设计方法
    C/C++(基础-运算符详解)
    C/C++(基础-常量,类型转换)
    C/C++(基础编码-补码详解)
  • 原文地址:https://www.cnblogs.com/huaniaoyuchong/p/13919908.html
Copyright © 2011-2022 走看看