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

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

基本上我想输出我的JSON对象在main.js中定义到我的HTML文件。 有人可以向我解释为什么服务器无法find日历文件。 它可以findindex.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"}); }); } 

只是一个猜测。

首先你需要设置GET /calendar路由require('./routes/main')(app);

然后你用app.set('views',__dirname + '/views');覆盖GET /calendar路由app.set('views',__dirname + '/views');

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

几件事要注意:

由于你的视图文件是.ejs扩展名,所以你可以在下面注释。

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

在完成所有configuration后,将'app'引用传递给路由器是惯例,在使用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"}); }); }