使用express在节点js中输出JSON对象

时间:2015-03-17 20:52:04

标签: json node.js express

这是我第一次使用Node而我正在使用express框架。我想在“日历”页面(在main.js中看到)输出一个json对象。当我运行路由器(main.js)时,我收到此错误:错误:ENOENT,没有这样的文件或目录'/ Users / Macbook / Desktop / node / views /('calendar.ejs')'

基本上我想将main.js中定义的JSON对象输出到我的html文件中。有人可以向我解释为什么服务器找不到日历文件。它可以找到index.ejs而不是日历。这是我想要实现的正确方法吗?

以下是我设置的目录结构:

-------node_modules
-------routes
-------------main.js
-------views
------------calendar.ejs
------------index.ejs
-------package.json
-------server.js

这是我的server.js代码:

var express=require('express');
var app=express();

require('./routes/main')(app);
app.set('views',__dirname + '/views');
app.set('view engine', 'ejs');
app.engine('html', require('ejs').renderFile);

var server=app.listen(3000,function(){
    console.log("We have started our server on port 3000");
});

这是我的main.js代码:

module.exports=function(app){

    app.get('/', function(req,res){
        res.render('index',{title:"Home page"});
    });

    app.get('/calendar',function(req,res){
        res.json({"foo": "bar"});
    });
}

2 个答案:

答案 0 :(得分:0)

只是一个猜测。

首先,您使用GET /calendar设置require('./routes/main')(app);路线。

然后,您使用GET /calendar覆盖app.set('views',__dirname + '/views');路线。

您需要选择GET /calendar是否返回呈现的HTML或JSON数据。

答案 1 :(得分:0)

很少有事情需要注意:

由于您的观看文件属于.ejs个附加信息,因此您可以在下方发表评论。(documentation

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

在设置完所有配置后,将“app”引用传递给路由器是惯例,middleware在使用ExpressJS时命令很重要。

server.js

var express=require('express');
var app=express();
app.set('views', path.join(__dirname, '/views'));
app.set('view engine', 'ejs');
require('./routes/main')(app);
var server=app.listen(3000,function(){
    console.log("We have started our server on port 3000");
});

main.js

module.exports=function(app){
    app.get('/', function(req,res){
        res.render('index',{title:"Home page"});
    });
    app.get('/calendar',function(req,res){
        res.render('calendar',{"foo": "bar"});
    });
}