我正在尝试使用NodeJS / ExpressJS和mongoose创建一个简单的API。
我收到错误:No default engine was specified and no extension was provided
API将调用cat API。由于它只支持XML,它将转换为JSON,然后将插入到mongoDB中,然后返回到客户端的JSON将以非常特定的方式进行格式化。目前,我遇到了问题。有谁能告诉我出了什么问题?
var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var History = mongoose.model('History');
var request = require("request");
var convert = require('xml-js');
const util = require('util')
router.get('/cat', function(req, res, next) {
var url = "http://thecatapi.com/api/images/get?format=xml&type=jpg"
var result = request.get(url, function (error, response, body) {
return body;
});
var options = {ignoreComment: true, alwaysChildren: true, compact: true};
var result_get = convert.xml2js(result, options);
var image = result_get['response']['data']['images']['image']
var url_data = image['url']['_text']
var id_data = image['id']['_text']
var source_url_data = image['source_url']['_text']
console.log(
id_data ,
url_data ,
source_url_data
);
var history = new History()
//hardcode user for now
history.user = "1"
history.url = url_data
history.id = id_data
history.source_url = source_url_data
history.save(function(err, history){
if(err) {
return res.send(500,err);
}
var history_json= res.json(history);
var returned_json = {}
var key = 'image'
returned_json[key] = {}
var data = {
url: url_data,
id: id_data,
source_url: source_url_data
}
returned_json[key] = data
console.log(JSON.stringify(returned_json))
return res.json(returned_json);
});
});
module.exports = router;
返回的JSON应如下所示:
{
"image": {
"url": "http://24.media.tumblr.com/tumblr_m3ay3e1zHp1qcxyrro1_1280.jpg",
"id": "c11",
"source_url": "http://thecatapi.com/?id=c11"
}
}
答案 0 :(得分:2)
您不需要视图引擎,因为您只是编写一个只返回JSON响应的后端服务器。在index.js文件中(或运行服务器的任何位置),注释掉以下行。
app.set('view engine', 'html');
答案 1 :(得分:1)
您描述的错误可能与您发布的代码无关,因为您没有渲染任何内容。但似乎在您的应用程序中使用res.render
。如果是这种情况 - 您需要设置一个视图引擎。
Re,您发布的代码:
1)。您无法从callback
中传递的request.get
函数内部返回正文。
body
仅在回调函数中定义,您必须将其余代码包装在此回调函数中。或者,您也可以将其余代码包装在函数中,并在callback
函数中调用它:
request.get(url, function (error, response, body) {
handleRes(body);
});
function handleRes(result){
/*.. the rest of your code goes here */
}
2)。一旦你打电话,你就不能再打电话给res.send
,因为res.send
结束了回复。