node + express + mysql 搭建后台

基础配置

入口文件app.js

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var session = require('express-session');

app.use(bodyParser());
app.use(cookieParser());
// 配置session,具体配置请查看express-session文档
app.use(session({
    secret: 'yoursecret',           // 密钥
    name: 'nodeapp',                // cookie的name,默认为connect.sid
    cookie: {maxAge: 1800000},      // cookie有效期时间
    resave: false,                  // 强制session保存到session store中。即使在请求中这个session没有被修改
    saveUninitialized: true,        // 强制没有“初始化”的session保存到storage中
}));

// 添加静态资源文件
app.use(express.static(__dirname + '/files'));

// 设置header头解决跨域问题
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')
    next();
});

// 路由,路由独立出来
var router = require('./routes/index.js');
router(app);

// 监听8088端口,端口可自行设定
var server = app.listen(8088, '0.0.0.0', function () {
    var host = server.address().address;
    var port = server.address().port;
    console.log("应用实例,访问地址为 http://%s:%s", host, port);
})
复制代码

./routes/index.js

var db = require('../db/index.js');
module.exports = function(app) {

    app.get('/', function (req, res) {
       res.send('Hello World');
    });
    
    app.get('/list', function (req, res) {
        db.query('SELECT * FROM users', function (err, result) {
            if(err){
                console.log(err);
                return;
            }
            console.log(result)
    	});
    });
    
    // 输出指定的模板文件,如果没有进行前后端分离可使用此方法
    /*app.get('/index.htm', function (req, res) {
        res.sendFile( __dirname + "/" + "index.htm" );
    })*/
    
};
复制代码

db.js

var mysql = require('mysql');
// 数据库配置
var config = {
    host     : 'localhost',
    user     : 'root',
    password : 'root',
    database : 'node',
    port: 3306
};

// 创建连接池
var pool = mysql.createPool(config);

// 查询数据库
var query = function(sql, options, callback){  
    pool.getConnection(function(err, conn){  
        if(err){  
            callback(err, null, null);  
        }else{  
            conn.query(sql, options, function(err, results, fields){  
                // 释放连接  
                conn.release();  
                // 事件驱动回调  
                callback(err, results, fields);  
            });  
        }  
    });  
};

module.exports = {
    query
};
复制代码

Session 跨域问题

如果使用的是session来保持登录状态,且涉及到session跨域问题,header文件头需要做出以下修改:

  1. 将外源Access-Control-Allow-Origin设为指定的域, 如:http://localhost:8080,可设置多个;
res.header('Access-Control-Allow-Origin', "http://localhost:8080");
res.header('Access-Control-Allow-Origin', "http://127.0.0.1:8080");
复制代码
  1. 将Access-Control-Allow-Credentials设为true,同时在ajax请求headers里设置withCredentials: true,本次示例中使用的是axios
res.header('Access-Control-Allow-Credentials', true); 
复制代码

修改后的设置:

app.all('*', function(req, res, next) {
    res.header('Access-Control-Allow-Origin', "*");
    res.header('Access-Control-Allow-Origin', "http://localhost:8080");
    res.header('Access-Control-Allow-Credentials', true); 
    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')
    next();
});
复制代码

使用token

loading...

其他

loading...

你可能感兴趣的:(node + express + mysql 搭建后台)