nodejs express框架全局变量设置

express全局变量缓存

文章参考

  1. nodejs学习:express本地、响应全局变量
  2. Node.js的全局对象和全局变量

问题描述

在做文件上传的时候,需要给请求返回URL的路径,因此就需要知道服务器的host 和 端口号,但是在对应的请求对象Request和Response没有找到相关信息,因此我的想法就是在启动的时候将服务器的信息保存到全局变量中。

设置全局变量的办法

  1. process.env 上挂载数据,只能是字符串
  2. global设置全局变量,允许挂载JSON数据格式
  3. experss对象传递到每个请求中去

案例

const express = require("express");
const http = require("http");
const app = express();

////////////////////// 获取post过来的数据 /////////////////////////////
var bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: false }));

////////////////////// 设置模板 /////////////////////////////
var ejs = require("ejs");
//使用set方法,为系统变量“views”和“view engine”指定值。
app.set("views", __dirname + "/views");
// 指定模板文件的后缀名为html
app.set('view engine', 'html');
// 运行hbs模块
app.engine('html', ejs.__express);

////////////////////// 设置web工程的根目录 /////////////////////////////
app.use(express.static(__dirname + '/'));

////////////////////// 允许跨域 /////////////////////////////
app.all('*', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With");
    res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By",' 3.2.1')
    if(req.method=="OPTIONS") res.send(200);/*让options请求快速返回*/
    else  next();
});


////////////////////// 利用文件来拆分路由的规模 /////////////////////////////
var klwIndex =  require('./routes/klw/klwIndex');
app.use('/klw', klwIndex(app));

////////////////////// 404处理 /////////////////////////////
app.get('*', function (req, res){
    console.log('404 handler..')
    res.render('common_page/404.html', {
        status: 404,
        title: 'NodeBlog',
    });
});

const server = http.createServer(app).listen(3000,'localhost',function () {
    const host = server.address().address;
    const port = server.address().port;
    // console.log("应用实例,访问地址为 http://%s:%s", host, port);
    process.env.host = host;
    // process 不能存储JSON格式的数据
    process.env.port = port;
    global.userInfo = {
        name: 'huangbiao',
        age: 30
    }
    app.SERVER_INFO = {
        name: 'zhangsan',
        age: 30
    }
});

app.use('/klw', klwIndex(app)); 算是改进点

var express = require('express');
var router = express.Router();
var fs = require('fs');
//"path"模块提供了生成上传文件块的文件名的方法。
var path = require('path');

var util = require('util');
//使用multiparty模块,也是必须要使用"multipart/form-data"类型
var multiparty = require('multiparty');
var appObj = null;

/**
 * klw 模块index
 * */
router.get('/', function(req, res, next) {
  //res.render('sqh/addGoods', { name: 'Express 路由1' });
  //res.writeHead(200, { "Content-Type": "text/plain" });
  //res.end("Welcome to the about!\n");
    console.log(global.userInfo);
    console.log(process.env.port);
    console.log(appObj.SERVER_INFO);
  res.render("klw/klwIndex",{
    btn_name:"发送ajax"
  });
});

module.exports = function(app){
// 响应全局变量
    appObj = app;
    return router;
};

module.exports = function(app){}; 用来接收参数作为当前路由的全局对象或者变量

猜你喜欢

转载自blog.csdn.net/hbiao68/article/details/85767881