2015-08-20 4 views
0

frontend.jadeНастройка маршрута Параметры в NodeJS

doctype html 
html 
    head 
    meta(charset='utf-8') 
    //if lt IE 9 
     script(type='text/javascript', src='http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js') 
    // [if gte IE 9] <! 
    script(type='text/javascript', src='http://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js') 
    // <![endif] 
    script(type='text/javascript', src='http://ajax.aspnetcdn.com/ajax/globalize/0.1.1/globalize.min.js') 
    script(type='text/javascript', 
    script(type='text/javascript', src='javascripts/file1.js') 
    script(type='text/javascript', src='javascripts/file2.js') 
    body 
    #db(style='position:relative;') 
    #db2(style='position:relative;') 
    #pGC(style='height:800px; width:1000px; margin: 0 auto') 

app.js

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 

var routes = require('./routes/index'); 
var users = require('./routes/users'); 
var info = require('./routes/info'); 

var app = express(); 


app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 


app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(require('stylus').middleware(path.join(__dirname, 'public'))); 
app.use(express.static(path.join(__dirname, 'public'))); 



app.use('/', routes); 
app.use('/users', users); 
app.use('/info', info); 

// catch 404 and forward to error handler 
app.use(function (req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handlers 

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
    app.use(function (err, req, res, next) { 
     res.status(err.status || 500); 
     res.render('error', { 
      message: err.message, 
      error: err 
     }); 
    }); 
} 

// production error handler 
// no stacktraces leaked to user 
app.use(function (err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
     message: err.message, 
     error: {} 
    }); 
}); 


module.exports = app; 

info.js

var express = require('express'); 
var request = require('request'); 
var fs = require('fs'); 

var router = express.Router(); 

router.get('/', function (req, res) { 

    res.render('frontend'); 

    }); 
    module.exports= router; 

Когда я добавить параметр в info.js, как это

router.get('/:name',function (req,res) { 
    res.render('frontend'); 
    } 

теперь вместо того, чтобы искать статические файлы в /javascripts/file1.js и /javascripts/file2.js

это GET транс/javascriptsfile1.js и возвращает 404.

Файлы расположены в общественном/JavaScripts/file1.js

ответ

0

в frontend.jade,

Изменения

script(type='text/javascript', src='javascripts/file1.js') 
script(type='text/javascript', src='javascripts/file2.js') 

к

script(type='text/javascript', src='/javascripts/file1.js') 
script(type='text/javascript', src='/javascripts/file2.js') 

Проблема заключается в том, что Java-SRC является по отношению к оказанной URL (который является http://localhost/info). Таким образом, добавив его с '/', он начнет с корневого url (http://localhost/), который express.static будет обслуживать файлы в общедоступной папке.

+0

Извините, у меня нет моего полного кода, указанного здесь. У меня действительно есть module.exports = router; в моей info.js и косой чертой перед информацией в app.js. Пожалуйста, посмотрите мой комментарий к ответу ниже. Я думаю, это моя настоящая проблема. – Joey

+0

Итак, вы должны обновить эту проблему, чтобы заявить о реальной проблеме. Включение кода, который пытается получить js/file1.js и js/file2.js, будет полезно для проверки проблемы. – Supasate

+0

В порядке я обновил вопрос с большим количеством кода и отразил новую проблему – Joey

0

Когда вы вызываете app.use, ваш сервер будет привязывать эту функцию к каждому запросу. Если вы вызовете next() во всех своих предыдущих функциях, он в конечном итоге попадет в эту функцию ошибки.

При добавлении параметра запрос не получает маршрут по маршруту и ​​продолжает проходить цепочку промежуточного программного обеспечения (и в конечном итоге к функциям ошибки).

Смежные вопросы