2016-03-14 3 views
0

У меня возникла проблема с Nodejs при навигации по моему локальному хосту: 3000/опросов. Я получаю сообщение об ошибке. Я последовал обширному руководству, и я не мог определить причину ошибки, несмотря на поиск ответов через stackoverflow, согласно учебному пособию все должно работать нормально. Когда я перехожу к localhost: 3000/users, он работает отлично. Мой файл маршрута users.js отвечает ресурсом по желанию, я просто не могу заставить localhost: 3000/опросы работать. Ниже я разместил код ошибки и контроллер, маршрут и модель моего опроса.Экспресс/узел Ошибка не была добавлена.

Ошибка я получаю

Error: No default engine was specified and no extension was provided. 

    at new View (/Users/testuser/WebstormProjects/test/node_modules/express/lib/view.js:62:11) 
    at EventEmitter.render (/Users/testuser/WebstormProjects/test/node_modules/express/lib/application.js:569:12) 
    at ServerResponse.render (/Users/testuser/WebstormProjects/test/node_modules/express/lib/response.js:961:7) 
    at /Users/testuser/WebstormProjects/test/app.js:60:7 
    at Layer.handle_error (/Users/testuser/WebstormProjects/test/node_modules/express/lib/router/layer.js:71:5) 
    at trim_prefix (/Users/testuser/WebstormProjects/test/node_modules/express/lib/router/index.js:310:13) 
    at /Users/testuser/WebstormProjects/test/node_modules/express/lib/router/index.js:280:7 
    at Function.process_params (/Users/testuser/WebstormProjects/test/node_modules/express/lib/router/index.js:330:12) 
    at next (/Users/testuser/WebstormProjects/test/node_modules/express/lib/router/index.js:271:10) 
    at Layer.handle_error (/Users/testuser/WebstormProjects/test/node_modules/express/lib/router/layer.js:73:5) 
    at trim_prefix (/Users/testuser/WebstormProjects/test/node_modules/express/lib/router/index.js:310:13) 
    at /Users/testuser/WebstormProjects/test/node_modules/express/lib/router/index.js:280:7 
    at Function.process_params (/Users/testuser/WebstormProjects/test/node_modules/express/lib/router/index.js:330:12) 
    at next (/Users/testuser/WebstormProjects/test/node_modules/express/lib/router/index.js:271:10) 
    at /Users/testuser/WebstormProjects/test/app.js:39:3 
    at Layer.handle [as handle_request] (/Users/testuser/WebstormProjects/test/node_modules/express/lib/router/layer.js:95:5) 

Модель

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var SurveySchema = new Schema ({ 
created: { 
    type: Date, 
    default: Date.now 
}, 
    von: Date, 
    bis: Date, 
    kmStart: Number, 
    kmEnde: Number, 
    strecke: String, 
    zweck: String, 
    privat: Boolean, 
    fahrer: String, 
    fahrzeug: String 
}); 

SurveySchema.statics = { 
load: function(id, cb){ 
    this.findOne({_id : id}).exec(cb); 
    } 
}; 

mongoose.model('Survey', SurveySchema); 

Контроллер

require('../models/survey'); 
var mongoose = require('mongoose'); 
var Survey = mongoose.model("Survey"); 

exports.post = function(req, res){ 
var survey = new Survey(req.body); 
survey.save(); 
res.jsonp(survey); 
} 

Маршруты

var express = require('express'); 
var router = express.Router(); 

var surveys = require('../controllers/surveysController'); 

/* POST /surveys */ 
router.post('/', surveys.post); 

module.exports = router; 
+0

Похоже, ваш фактический призыв к 'визуализации()' в app.js, но вы не настроили вид двигателя (так Экспресс знает, как загрузить и отформатируйте ответ). – mscdex

ответ

0

Можете ли вы показать свой app.js? Давайте убедитесь, что вы сказали, приложению использовать маршрутизатор для/обследований

+0

Я сделал выше, спасибо большое Gonen – jake

+0

@ Gonen, вопросы должны быть заданы в комментариях к вопросу, а не в области ответов. – shteeven

+0

Недостаточно очков для комментариев ... – Gonen

0

Это является app.js как запрошенного

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

var users = require('./routes/users'); 
var surveys = require('./routes/surveys'); 

var app = express(); 

var mongoose = require('mongoose'); 

mongoose.connect('mongodb://localhost/mydb'); 
var db = mongoose.connection; 

db.on('error', function callback(){ 
    console.log("connection to MongoDB failed"); 
}); 

db.once('open', function callback(){ 
    console.log("connection to MongoDB success"); 
}); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 

app.use('/users', users); 
app.use('/surveys', surveys); 

// 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; 
0

Я думаю, что я могу знать проблему, но я буду корректировать свой ответ, если он не работает. В вашем коде я нигде не вижу, чтобы был установлен механизм шаблонов. Вы можете сделать это, установив что-то вроде Jade или Swig.

npm install jade --save

Тогда говорю выразить, что он там.

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

Затем вы можете установить переменные, которые будут отображены в шаблоне.

app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
    message: err.message, //message will be rendered 
    error: {} 
    }); 
}); 

Затем шаблон; с Jade, он обрабатывает код до фактического html. Таким образом, сообщение будет оказывать <h1>This is an error message</h1>

html 
    head 
    body 
    h1= message 

Конечно, вы можете выписать HTML; это просто для удобства. Вот ссылка на Jade или Swig. Если вы используете Swig, что я делаю, вы можете отображать свои данные на страницах с двумя открывающимися и закрывающимися фигурными скобками. Например,

<div class="alert alert-danger" role="alert"> 
    Error: {{message}} 
</div> 
+0

Большое спасибо за ваш ответ. Я должен был упомянуть, что я удалил Jade из файлов app.js и package.json, чтобы он не отображался в HTML и не размещал API, я извиняюсь - все еще n00b в этой области. Я использую плагин RESTClient для Firefox с контентом Content-Type/json для проверки http: // localhost: 3000/survey. – jake

1

@all Я просто хотел сказать, что я исправил проблему. Я думаю, это потому, что я использовал неправильный MongoDB в файле app.js. Изменение решило проблему.

mongoose.connect('mongodb://localhost/mydb'); 

Для

mongoose.connect('mongodb://localhost/test');