2016-11-12 35 views
1

我不熟悉使用Express和Mongoos編寫API,但我認爲應該起作用的東西正在導致我一些悲傷。使用Mongoos無法使用Express版本

我試圖讓事情變得模塊化,因爲我可以,所以我有我的主要app.js,一個model.js然後我routes.js

這裏是我的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 mongoose = require('mongoose'); 
var cors = require('cors'); 

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

var app = express(); 

// 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: true })); 
app.use(cookieParser()); 
app.use(cors());  

app.use('/api', require('./routes/api')); 


    // changes it to use the optimized version for production 
    app.use(express.static(path.join(__dirname, '/dist'))); 

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

以下是我在我的/ API(routes文件)

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


//GUESTBOOK END POINTS 
var Guestbook = require('../models/guestbook') 

router.route('/guestbook') 

    .post(function(req, res){ 

    var guestbook = new Guestbook(); 

    guestbook.firstname = req.body.firstname; 
    guestbook.lastname = req.body.lastname; 
    guestbook.email = req.body.email; 
    guestbook.postedon = req.body.postedon; 
    guestbook.comment = req.body.comment; 
    guestbook.rate = req.body.rate; 

    guestbook.save(function(err){ 
     if(err) 
     res.send(err); 

     res.json({message:'Post created!'}) 

    }); 

    }) 

    .get(function(req, res){ 
    guestbook.find(function(err, guestbook){ 
     if(err) 
     res.send(err); 

     res.json(guestbook); 
    }); 

    }); 





//RETURN ROUTER AS MODULE 
module.exports = router; 

最後,這裏是我的模型:

//DEPENDENCIES 
var restful = require('node-restful'); 
var mongoose = restful.mongoose; 

var guestbookSchema = new mongoose.Schema({ 
    firstname: String, 
    lastname: String, 
    email: String, 
    postedon: Date, 
    comment: String, 
    rate: Number 
}); 



//RETURN MODEL 


module.exports = mongoose.model('guestbook', guestbookSchema); 

再一次,這篇文章的作品,但得不到。

這裏是的console.log我回來了get:

Error: No default engine was specified and no extension was provided. 
    at new View (/Users/christophernakea/Documents/Projects/TestAPIExpress/server/node_modules/express/lib/view.js:62:11) 
    at EventEmitter.render (/Users/christophernakea/Documents/Projects/TestAPIExpress/server/node_modules/express/lib/application.js:569:12) 
    at ServerResponse.render (/Users/christophernakea/Documents/Projects/TestAPIExpress/server/node_modules/express/lib/response.js:961:7) 
    at /Users/christophernakea/Documents/Projects/TestAPIExpress/server/app.js:32:13 
    at Layer.handle_error (/Users/christophernakea/Documents/Projects/TestAPIExpress/server/node_modules/express/lib/router/layer.js:71:5) 
    at trim_prefix (/Users/christophernakea/Documents/Projects/TestAPIExpress/server/node_modules/express/lib/router/index.js:310:13) 
    at /Users/christophernakea/Documents/Projects/TestAPIExpress/server/node_modules/express/lib/router/index.js:280:7 
    at Function.process_params (/Users/christophernakea/Documents/Projects/TestAPIExpress/server/node_modules/express/lib/router/index.js:330:12) 
    at next (/Users/christophernakea/Documents/Projects/TestAPIExpress/server/node_modules/express/lib/router/index.js:271:10) 
    at Layer.handle_error (/Users/christophernakea/Documents/Projects/TestAPIExpress/server/node_modules/express/lib/router/layer.js:67:12) 
    at trim_prefix (/Users/christophernakea/Documents/Projects/TestAPIExpress/server/node_modules/express/lib/router/index.js:310:13) 
    at /Users/christophernakea/Documents/Projects/TestAPIExpress/server/node_modules/express/lib/router/index.js:280:7 
    at Function.process_params (/Users/christophernakea/Documents/Projects/TestAPIExpress/server/node_modules/express/lib/router/index.js:330:12) 
    at Immediate.next (/Users/christophernakea/Documents/Projects/TestAPIExpress/server/node_modules/express/lib/router/index.js:271:10) 
    at Immediate.<anonymous> (/Users/christophernakea/Documents/Projects/TestAPIExpress/server/node_modules/express/lib/router/index.js:618:15) 
    at Immediate.immediate._onImmediate (timers.js:435:18) 

回答

0

問題在於你正在嘗試渲染一個頁面而沒有指定模板引擎,因爲你只是創建一個API,你不需要渲染任何頁面,所以你只需要返回一個json res。渲染( '錯誤',{ 消息:err.message, 錯誤:{}

您可以通過res.json取代它( '錯誤':err.message)

+0

我試着更換這行:if(err)res.send(err);與res.json('錯誤':err.message)並得到相同的錯誤... – cnak2

+0

@ cnak2 res.send()不呈現模板。因此,更換該行不會有任何影響。 – yeiniel

+0

@hatim,所以你在哪裏建議我替換代碼會生成以下錯誤:res.json('error':err.message); ^^^^^^^ SyntaxError:missing)在參數列表後 – cnak2

0

錯誤是告訴你,你有沒有設定一個模板引擎有明確的框架。請參閱與此主題相關的express guide

此行

res.render('error', { 
    message: err.message, 
    error: {} 
}); 

渲染一個模板。但是你沒有配置使用哪一個。

+0

我沒有看到該行在我的代碼中,我實際上正在返回:res.send(err);不是'render' – cnak2

+0

你在app.js上使用渲染 – yeiniel

+0

哦,我明白了,因爲我的路線有錯誤,發送電子郵件錯誤消息並將其呈現在app.js中... – cnak2

相關問題