2012-01-14 3 views
2

Я пытаюсь доставить статический html-файл, который использует jquery и другие библиотеки , и я хочу знать, как сделать его с помощью выражения.Экспресс, бросающий неожиданный токен «indent»

Вот мой app.js код (экспресс-файловый сервер)

var express = require('express') 
, routes = require('./routes') 
var app = module.exports = express.createServer(); 
app.configure(function(){ 
app.set('views', __dirname + '/views'); 
app.use(express.static(__dirname + '/public')); 
}); 

app.configure('development', function(){ 
app.use(express.errorHandler({ dumpExceptions: true, showStack: 
true })); 
}); 

app.configure('production', function(){ 
app.use(express.errorHandler()); 
}); 

app.register('.html', require('jade')); 
app.get('/', function(req, res) { 
    res.render('index.html'); 
}); 

app.listen(3000); 

и мой index.html является

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http:// 
www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head> 
<link rel='stylesheet' type='text/css' href='theme.css' /> 
<link rel='stylesheet' type='text/css' href='fullcalendar.css' /> 
<link rel='stylesheet' type='text/css' href='fullcalendar.print.css' 
media='print' /> 
<script type='text/javascript' src='jquery-ui-1.8.11.custom.min.js'></ 
script> 
<script type='text/javascript' src='jquery-1.5.2.min.js'></script> 
<script type='text/javascript' src='fullcalendar.min.js'></script> 
<script type='text/javascript'> 
     $(document).ready(function() { 
       $('#calendar').fullCalendar({ 
         theme: true, 
         header: { 
           left: 'prev,next today', 
           center: 'title', 
           right: 'month' 
         }, 
         editable: true, 
         events: { url : 'http://localhost:5555/'}, 
         firstDay : 1, 
         weekends : true 
       }); 
     }); 
</script> 
<style type='text/css'> 
     body { 
       margin-top: 40px; 
       text-align: center; 
       font-size: 13px; 
       font-family: "Lucida 
Grande",Helvetica,Arial,Verdana,sans-serif; 
       } 
     #calendar { 
       width: 900px; 
       margin: 0 auto; 
       } 
</style> 
</head> 
<body> 
<div id='calendar'></div> 
</body> 
</html> 

и когда я запускаю мой сервер и указать мой браузер на него, я получаю ошибка Фолля

Error: D:\Workspace\nodejs\test\my-server/views/index.html:12 
    10| <script type='text/javascript'> 
    11| 
> 12|   $(document).ready(function() { 
    13| 
    14|     $('#calendar').fullCalendar({ 
    15|       theme: true, 
unexpected token "indent" 
    at Object.parseExpr (D:\Workspace\nodejs\test\my-server 
\node_modules\jade\lib\parser.js:228:15) 
    at Object.parse (D:\Workspace\nodejs\test\my-server\node_modules 
\jade\lib\parser.js:129:25) 
    at parse (D:\Workspace\nodejs\test\my-server\node_modules\jade\lib 
\jade.js:101:62) 
    at Object.compile (D:\Workspace\nodejs\test\my-server\node_modules 
\jade\lib\jade.js:148:9) 

Я первоначальный прибегая к помощи, но coudn't цифра много .. может Сомон пусть к теперь что-то происходит. Thanks

ответ

3

Проблема заключается в подключении .html с двигателем шаблона нефрита. Джейд требует файла «HTML», чтобы выглядеть следующим образом:

!!! 5 
html(lang="en") 
    head 
    title= pageTitle 
    script(type='text/javascript') 
     if (foo) { 
     bar() 
     } 
    body 
    h1 Jade - node template engine 
    #container 
     - if (youAreUsingJade) 
     p You are amazing 
     - else 
     p Get on it! 

и в вашем случае нефрит двигатель пытается разобрать ваш файл HTML в качестве шаблона нефрита и дросселей. Если вы действительно хотите создать чистый HTML-файл, вы можете посмотреть at this answer.

+0

Я видел это сообщение, и это тоже не сработало. Хотя чтение из файловой системы работает. используя (fs.readfile). Я хотел знать, есть ли простой способ просто обслуживать html-файлы. – JWhiz

2

res.render() собирается лечить «index.html» в качестве шаблона и попытаться обработать его через шаблонизатор (нефрит). Так как ваш HTML файл не форматированный шаблон (это просто статический HTML-файл), вы получаете ошибки.

Если вы хотите просто обслуживать статический файл index.html, просто поместите его в статический каталог, объявленный в app.use(express.static(__dirname + '/public'));, и получите доступ к нему напрямую. Файлы в статическом каталоге не обрабатываются предварительно. Вам также может понадобиться настроить промежуточное ПО Express, если вы пытаетесь сделать что-то более сложное. Проверьте конец секции Middleware на http://expressjs.com/guide.html#middleware

Вы могли бы также прочитать содержимое файла, используя модуль fs и служить (который выглядит как то, что вы в настоящее время пытаются сделать), но это влечет за собой дополнительные накладные расходы:

//var fs = require('fs'); 
app.get('/html', function(req, res) { 
    res.writeHead(200, {'Content-Type': 'text/html'}); 
    var contents = fs.readFileSync("./public/index.html", "UTF-8"); 
    res.end(contents); 
}); 
3

только для тех, кто собирается, хотя это. Вы, скорее всего, следуете примеру здесь.

https://github.com/visionmedia/express/blob/master/examples/ejs/index.js 

и событие, если вы не заинтересованы в обслуживании html-файлов. то все, что вам нужно сделать, это использовать ejs.

если ваш проект не использует шаблоны нефритовые тогда просто редактировать вам package.json файл из этого:

"jade": "*" 

к этому

"ejs": "*" 

, а затем все ваши хорошо идти со следующими app.js конфигурация:

app.engine('.html', require('ejs').__express); 

app.set('view engine', 'html'); 

уверенный вещь заказ важный.

+0

@Legendre Рад, что это помогло :) –

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