2016-03-14 70 views
0

当我导航到我的本地主机:3000 /调查时收到错误消息,我遇到了Nodejs的问题。我跟着一个广泛的教程,我无法确定错误的原因,尽管通过stackoverflow搜索答案,根据教程一切都应该正常工作。当我导航到本地主机:3000 /用户时,它工作得很好。我的路由文件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: {} 
    }); 
}); 

然后模板;与翡翠,它预处理代码为实际的HTML。因此,该消息将呈现给<h1>This is an error message</h1>

html 
    head 
    body 
    h1= message 

当然,你可以写出来的HTML;这只是为了方便。这里是JadeSwig的链接。如果您使用Swig,我可以在页面中使用两个打开和关闭花括号来呈现数据。例如,

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

非常感谢您的回答。我应该提到我从app.js文件和package.json依赖关系中删除了Jade,但没有将它呈现在HTML中并托管一个API,我很抱歉 - 仍然是该区域的一个n00b。我使用带有Content-Type应用程序/ json头文件的Firefox的RESTClient插件来测试http:// localhost:3000 /调查。 – jake

1

@我只是想说我确实解决了这个问题。我认为这是因为我在app.js文件中使用了错误的MongoDB。这个改变解决了这个问题。

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

mongoose.connect('mongodb://localhost/test'); 
相关问题