基础配置
入口文件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文件头需要做出以下修改:
- 将外源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");
复制代码
- 将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...