使用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"}); }); }