mirror of
https://github.com/thinkjs/thinkjs.git
synced 2026-01-25 14:42:47 +00:00
update
This commit is contained in:
parent
3e06e97669
commit
aeb2dd4800
@ -18,4 +18,5 @@ module.exports = {
|
||||
Think: THINK_LIB_PATH + "/Core/Think.js",
|
||||
Valid: THINK_LIB_PATH + "/Core/Valid.js",
|
||||
View: THINK_LIB_PATH + "/Core/View.js",
|
||||
WebSocket: THINK_LIB_PATH + "/Core/WebSocket.js",
|
||||
}
|
||||
@ -33,6 +33,7 @@ module.exports = {
|
||||
error_tpl_path: THINK_PATH + "/View/error.html", //错误页模版
|
||||
error_no_key: "errno", //错误number的key
|
||||
error_msg_key: "errmsg", //错误消息的key
|
||||
use_websocket: false, //是否使用websocket
|
||||
|
||||
deny_ip: [], //阻止的ip
|
||||
|
||||
@ -43,7 +44,7 @@ module.exports = {
|
||||
|
||||
session_auto_start: false, //自动启动session
|
||||
session_id: "thinkjs", //session id
|
||||
session_type: "File", //session存储类型
|
||||
session_type: "", //session存储类型, 空为内存,还可以为File, Db
|
||||
session_options: {}, //session的一些选项
|
||||
session_cookie_sign: "", //session对应的cookie使用签名,如果使用这里填密钥
|
||||
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
*/
|
||||
var cluster = require("cluster");
|
||||
var fs = require("fs");
|
||||
var thinkHttp = thinkRequire("Http");
|
||||
|
||||
var App = module.exports = Class(function(){
|
||||
//controller和action的校验正则
|
||||
@ -142,10 +143,12 @@ App.run = function(){
|
||||
* @type {Object}
|
||||
*/
|
||||
App.mode = {
|
||||
//命令行模式
|
||||
cli: function(){
|
||||
var http = thinkRequire("Http")[APP_MODE](APP_MODE_DATA);
|
||||
return App.listener(http);
|
||||
var defaultHttp = thinkHttp.getDefaultHttp(APP_MODE_DATA);
|
||||
thinkHttp(defaultHttp.req, defaultHttp.res).run(App.listener);
|
||||
},
|
||||
//默认模式
|
||||
_default: function(){
|
||||
var clusterNums = C('use_cluster');
|
||||
//不使用cluster
|
||||
@ -176,15 +179,41 @@ App.mode = {
|
||||
*/
|
||||
App.createServer = function(){
|
||||
var server = require("http").createServer(function (req, res) {
|
||||
thinkRequire("Http")(req, res).run(App.listener);
|
||||
thinkHttp(req, res).run(App.listener);
|
||||
});
|
||||
var params = [C('port')];
|
||||
//禁止外网直接通过IP访问
|
||||
if (C('deny_remote_access_by_ip')) {
|
||||
params.push("127.0.0.1");
|
||||
};
|
||||
App.websocket(server);
|
||||
server.listen.apply(server, params);
|
||||
};
|
||||
/**
|
||||
* 监听websocket
|
||||
* @param {[type]} server [description]
|
||||
* @return {[type]} [description]
|
||||
*/
|
||||
App.websocket = function(server){
|
||||
if (C('use_websocket')) {
|
||||
//暂时使用该库
|
||||
var websocket = require('websocket-driver');
|
||||
server.on("upgrade", function(request, socket, body){
|
||||
if (!websocket.isWebSocket(request)){
|
||||
return false;
|
||||
};
|
||||
var driver = websocket.http(request);
|
||||
driver.io.write(body);
|
||||
socket.pipe(driver.io).pipe(socket);
|
||||
driver.messages.on('data', function(message) {
|
||||
message = JSON.parse(message || "{}");
|
||||
var defaultHttp = thinkRequire("Http").getDefaultHttp();
|
||||
|
||||
});
|
||||
driver.start();
|
||||
})
|
||||
};
|
||||
}
|
||||
/**
|
||||
* 监听回调函数
|
||||
* @param {[type]} http [description]
|
||||
|
||||
@ -25,7 +25,7 @@ module.exports = Class(function(){
|
||||
var method = this.req.method.toLowerCase();
|
||||
var methods = ["post", "put", "patch"];
|
||||
if (methods.indexOf(method) > -1) {
|
||||
this.getData(callback);
|
||||
this.getPostData(callback);
|
||||
}else{
|
||||
callback && callback(this.http);
|
||||
}
|
||||
@ -45,7 +45,7 @@ module.exports = Class(function(){
|
||||
* @param {Function} callback [description]
|
||||
* @return {[type]} [description]
|
||||
*/
|
||||
getData: function(callback){
|
||||
getPostData: function(callback){
|
||||
//没有post数据,直接回调
|
||||
if (!this.hasPostData()) {
|
||||
return callback && callback(this.http);
|
||||
@ -115,7 +115,7 @@ module.exports = Class(function(){
|
||||
extend(this.http, req);
|
||||
|
||||
//解析url中的参数
|
||||
var urlInfo = url.parse("//" + req.headers.host + this.req.url, true, true);
|
||||
var urlInfo = url.parse("//" + (req.headers.host || "127.0.0.1") + this.req.url, true, true);
|
||||
this.http.pathname = urlInfo.pathname;
|
||||
//query只记录?后面的参数
|
||||
this.http.query = urlInfo.query;
|
||||
@ -232,37 +232,30 @@ module.exports = Class(function(){
|
||||
}
|
||||
});
|
||||
/**
|
||||
* 命令行下的简易http对象
|
||||
* @param {[type]} url [description]
|
||||
* @return {[type]} [description]
|
||||
* 获取默认的http信息
|
||||
* @param {[type]} data [description]
|
||||
* @return {[type]} [description]
|
||||
*/
|
||||
module.exports.cli = function(data){
|
||||
data = data.indexOf('=') > -1 ? querystring.parse(data) : {url: data};
|
||||
if (data.url.indexOf("/") !== 0) {
|
||||
data.url = "/" + data.url;
|
||||
module.exports.getDefaultHttp = function(data){
|
||||
data = data || {};
|
||||
if (isString(data)) {
|
||||
data = data.indexOf('=') > -1 ? querystring.parse(data) : {url: data};
|
||||
};
|
||||
//解析url中的参数
|
||||
var urlInfo = url.parse("//" + (data.host || "127.0.0.1") + data.url, true, true);
|
||||
var fn = function(){ return ""};
|
||||
return {
|
||||
method: data.method || "get",
|
||||
ip: function(){
|
||||
return data.ip || "127.0.0.1"
|
||||
req: {
|
||||
httpVersion: "1.1",
|
||||
method: data.method || "GET",
|
||||
url: data.url || "",
|
||||
headers: data.headers || {},
|
||||
connection: {
|
||||
remoteAddress: data.ip || "127.0.0.1"
|
||||
}
|
||||
},
|
||||
pathname: urlInfo.pathname,
|
||||
query: urlInfo.query,
|
||||
get: extend({}, urlInfo.query),
|
||||
host: urlInfo.host,
|
||||
hostname: urlInfo.hostname,
|
||||
getHeader: fn,
|
||||
setHeader: fn,
|
||||
post: {},
|
||||
file: {},
|
||||
cookie: {},
|
||||
setCookie: fn,
|
||||
echo: fn,
|
||||
end: fn,
|
||||
sendTime: fn,
|
||||
redirect: fn
|
||||
res: {
|
||||
end: fn,
|
||||
write: fn,
|
||||
setHeader: fn
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -34,8 +34,8 @@ var cookie_unsign = function(val, secret){
|
||||
}
|
||||
|
||||
module.exports = Class(function(){
|
||||
var data = {};
|
||||
return {
|
||||
key: "",
|
||||
cookie: null,
|
||||
init: function(http){
|
||||
this.http = http;
|
||||
@ -69,7 +69,7 @@ module.exports = Class(function(){
|
||||
* 刷新session
|
||||
* @return {[type]} [description]
|
||||
*/
|
||||
flush: function(){
|
||||
save: function(){
|
||||
|
||||
}
|
||||
}
|
||||
@ -100,9 +100,8 @@ module.exports.start = function(http){
|
||||
http.session_cookie = session_cookie;
|
||||
|
||||
var name = C('session_type') + "Session";
|
||||
var cls = thinkRequire(name)(http);
|
||||
//session类
|
||||
http.session = cls;
|
||||
http.session = thinkRequire(name)(http);
|
||||
|
||||
return cookie;
|
||||
};
|
||||
|
||||
21
lib/Lib/Core/WebSocket.js
Normal file
21
lib/Lib/Core/WebSocket.js
Normal file
@ -0,0 +1,21 @@
|
||||
var WebSocket = Class(function(){
|
||||
return {
|
||||
init: function(request){
|
||||
this.request = request;
|
||||
}
|
||||
}
|
||||
})
|
||||
/**
|
||||
* 是否是websocket请求
|
||||
* @param {[type]} req [description]
|
||||
* @return {Boolean} [description]
|
||||
*/
|
||||
WebSocket.isWebSocket = function(request){
|
||||
if (request.method !== 'GET') {
|
||||
return false;
|
||||
};
|
||||
var connection = request.headers.connection || "";
|
||||
var upgrade = request.headers.upgrade;
|
||||
return connection.toLowerCase().indexOf('upgrade') > -1 && upgrade.toLowerCase() === 'websocket';
|
||||
}
|
||||
module.exports = WebSocket;
|
||||
Loading…
x
Reference in New Issue
Block a user