2015-11-05 2 views
1

Я пытаюсь передать переменные из листовки/jade в файл js/node. Я использую node + express + sheetlet + js Я делаю это следующим образом, но я не получаю значения. Вот код, я использую:Параметры отправки от jade до js/node

app.js

var express = require('express'); 
var routes = require('./routes'); 
var tiles = require('./routes/tiles'); 
var http = require('http'); 
var path = require('path'); 
var app = express(); 
app.set('port', process.env.PORT || 3000); 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 
app.use(express.favicon()); 
app.use(express.logger('dev')); 
app.use(express.json()); 
app.use(express.urlencoded()); 
app.use(app.router); 
app.use(express.static(path.join(__dirname, 'public'))); 

if ('development' == app.get('env')) { 
    app.use(express.errorHandler()); 
} 

app.get('/', routes.index); 
app.get('/tiles', tiles.tiles); 

http.createServer(app).listen(app.get('port'), function(){ 
    console.log('Express server listening on port ' + app.get('port')); 
}); 

index.js // индексный файл, который делает файл index.jade

exports.index = function(req, res){ 
    res.render('index'); 
}; 

index.jade // файл нефрита, линия, где посылаю Params является "плитка? г = {г} & х = {х} & у = {у}"

doctype html 
html 
    head 
    title Tile Server Example 
    meta(charset='utf-8') 
    meta(name='viewport', content='width=device-width, initial-scale=1.0') 
    link(rel='stylesheet', href='http://cdn.leafletjs.com/leaflet-0.7.1/leaflet.css') 
    body 
    #map(style='width: 800px; height: 800px') 
    a(href='tiles') <tiles> 
    script(src='http://cdn.leafletjs.com/leaflet-0.7.1/leaflet.js') 
    script. 
    var map; 
    var mbTiles = new L.tileLayer('tiles?z={z}&x={x}&y={y}', { 
    tms: true, 
    attribution: 'this is a test', 
    opacity: 0.7 
    }); 
    map = new L.Map("map",{ 
    zoom: 18, 
    center: [12.83563,77.68312], 
    layers: [mbTiles] 
    }); 

tiles.js // здесь, где я получаю Params, я их отображения с помощью консоли

var x = "", y = "", z = ""; 

module.exports = function(req, res){  
    x = req.query.x; 
    y = req.query.y; 
    z = req.query.z;  

    console.log("z="+z+"&x="+x+"&y="+y); 

    var sqlite3 = require('sqlite3').verbose(); 
    var db = new sqlite3.Database('routes/tiles.mbtiles'); 
    var sql = "SELECT * FROM tiles WHERE zoom_level = "+z+" AND tile_column = "+x+" AND tile_row = "+y; 

    db.each(sql, function(err, row) { 
      console.log(sql); 
      res.writeHead(200, {'content-type':'image/jpg'}); 
      res.write(row.tile_data); 
      res.end(); 
    }); 
    db.close(); 
}; 

Любая идея?

+0

Значения, отображаемые на консоли при их регистрации? –

+0

Вы получаете это через консоль: GET/tiles? Z = 16 & x = 46910 & y = 35126 - - ms - - –

+0

Ну, это всего лишь информация о запросе. Я имею в виду, это утверждение: 'console.log (" x -> "+ x);' log something? Или это никогда не достигается? –

ответ

1

Попробуйте изменить, как вы экспортируете свои модули. В tiles.js:

Изменение:

exports.tiles = function(req, res){ ... 

To:

module.exports = function(req, res){ 

И в app.js:

app.get('/tiles', tiles.tiles) 

Для

app.get('/tiles', tiles) 

UPDATE

Кроме того, добавьте res.end() после установки заголовков и необходимой информации, чтобы изменить ответ в готовое состояние.

res.writeHead(200, {'content-type':'image/png'}); 
res.write(row.tile_data); 
res.end(); 
+0

Я сделал изменения и теперь загружает изображения, НО, первый раз загружает страницу, изображения не отображаются (журнал: GET/200 394,741 мс - 619), и через одну минуту страница отправляет params и загружает изображения (log; GET/tiles? z = 16 & x = 46909 & y = 35123 200 120005.811 ms - -) –

+0

О, '120005.811 ms' действительно слишком длинный. Я думаю, проблема в запросе mysql. Можете ли вы записать его на консоль, скопировать и запустить из mysql cli или какого-нибудь клиента? Будет ли такая же сумма своевременной? –

+0

db is sqlite3 (файл переименовывается как .mbtiles и индексируется уровнем масштабирования, столбцом плитки и строкой строки). Я запускаю запрос в SQLiteStudio и занимает 0.000 секунд. –