node实践记录

process.env

process.env属性返回一个包含用户环境信息的对象。

最常见的需求,前端需要根据不同的环境(dev,prd),来调用不同的后端接口。如果用webpack,是这么做的:

1)package.json里的命令:

# 通过cross-env配置项往环境里面注入变量NODE_EVN
"scripts": {
"dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot",
"build": "cross-env NODE_ENV=production webpack --progress --hide-modules"
}

webpack.config.js获取
console.log(process.env.NODE_ENV)//执行npm run dev,打印development
事实上,以上从命令行获取环境变量这个件事跟webpack没有关系,执行node文件也可以这样获取。
1)新建文件test.js:
console.log(global.process.env.a);

2)命令行执行test.js:
a=1 node test.js

命令行输出a的值1。

题外话,如果顺序改变呢?命令行执行下面的命令
测试结果:test.js能被执行,但获取不到a的值。

global.process.env.a这个变量在这次node命名结束前都能获取到,如果是以后执行也能获取到,就需要用以下的命令(mac linux):

export a=2 && node test.js

这条命令运行后,只要运行node文件,在文件里可以得到 global.process.env.a的值为2.

process.argv

还记得前面说过,下面的命令无法通过 process.env 获取。

node test.js a=1

这时候就要用到process.argv。他返回当前进程的所有命令行参数,是个数组,前2个元素是node命令路径和被执行的文件路径:
在这里插入图片描述
所以经常见到

	process.argv.slice(2)

// 获取输入参数 --options
// 首先定义好一个对象,然后在里面填写默认值
let args = process.argv;
let options = {
    port: 8080
};

// 其次,根据用户传入进来的参数进行校验,最骚的就是++i
// 因为它改变了 i 的值,然后直接定位到了value
for (let i = 0; i < args.length; i++) {
    let option = args[i].replace(/\-/g, '');
    if (typeof options[option] !== 'undefined') {
        if (args[++i]) {
            options[option] = args[i] || options[option];
        } else {
            console.log(('Missing argument value for ' + option + '!'), '\n');
            return;
        }
    }
}

process是node的全局变量,不用require直接能访问。中文文档标注为:进程对象。它提供当前 Node.js 进程的有关信息,以及控制当前 Node.js 进程。

创建https服务
# 生成https证书
- 生成私钥key文件:
openssl genrsa -out privatekey.pem 1024

- 通过私钥生成CSR证书签名  (需要填一些信息、可直接回车)
openssl req -new -key privatekey.pem -out certrequest.csr

- 通过私钥和证书签名生成证书文件 
openssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem

# 导入文件
var https = require('https')
    ,fs = require("fs");

var options = {
    key: fs.readFileSync('./privatekey.pem'),
    cert: fs.readFileSync('./certificate.pem')
};

https.createServer(options, (req,res) => {
    // 这里填写你要的文件
}).listen(3011, 'domain')
preflighted request
一个简单的请求如下:

# HTTP方法是下列之一
HEAD
GET
POST
# HTTP头包含
Accept
Accept-Language
Content-Language
Last-Event-ID
# Content-Type,但仅能是下列之一
application/x-www-form-urlencoded
multipart/form-data
text/plain
任何一个不满足上述要求的请求,即被认为是复杂请求。一个复杂请求不仅有包含通信内容的请求,同时也包含预请求(preflight request)。
# 请求中除GET,POST,Head都需要发送预请求,通过设置一个最大允许时间,可以减少预请求的发送。
http.createServer((req, res) => {
    // req.setHeader('accept-language', 'zh-CN,zh;q=0.9') 
    if (req) {
        res.setHeader('X-Foo', 'bar');
        res.setHeader ('Access-Control-Allow-Methods','PUT,POST,GET,DELETE');
        res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8082');
        res.setHeader("Access-control-max-age", 1000);
        res.setHeader('Access-Control-Allow-Headers', 'Origin, Accept-Language, X-Requested-With, Content-Type, Accept, csrfpreventiontoken');
        res.writeHead(200, {"Content-Type": "application/json;charset=utf-8"});
        res.end('ok');
    }

}).listen(8080, 'ipaddress');
# 获取头部信息
req.headers
# 获取参数
post 请求是放在req.body
get 请求是放在JSON.stringify(url.parse(req.url,true).query)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值