gpt4 book ai didi

node.js - 如何使用node.js发布页面

转载 作者:太空宇宙 更新时间:2023-11-03 22:36:14 25 4
gpt4 key购买 nike

我刚刚开始学习node.js。在过去的两天里,我一直在开发一个接受用户输入并发布 ICS 文件的项目。我已经完成了所有这些工作。现在考虑一下我什么时候必须显示这些数据。我得到一个 router.get 来查看我是否位于 /cal 页面并且..

router.get('/cal', function(req, res, next) 
{

var db = req.db;
var ical = new icalendar.iCalendar();
db.find({
evauthor: 'mykey'
}, function(err, docs) {
docs.forEach(function(obj) {
var event2 = ical.addComponent('VEVENT');
event2.setSummary(obj.evics.evtitle);
event2.setDate(new Date(obj.evics.evdatestart), new Date(obj.evics.evdateend));
event2.setLocation(obj.evics.evlocation)
//console.log(ical.toString());
});
});

res.send(ical.toString());
// res.render('index', {
// title: 'Cal View'
// })
})

因此,当请求 /cal 时,它会循环遍历我的数据库并创建一个 ICS 日历 ical。如果我在循环内执行 console.log(ical.toString) 它会按照协议(protocol)为我提供格式正确的日历。

但是,我想以此结束响应。最后,我执行了 res.send 只是为了查看页面上发布的内容。这就是发布的内容

BEGIN:VCALENDAR VERSION:2.0 
PRODID:calendar//EN
END:VCALENDAR

现在原因非常显而易见。这是 Node.js 的本质。在回调函数完成将每个 VEVENT 添加到日历对象之前,响应将发送到浏览器。

我有两个相关问题:

1)“等待”回调完成的正确方法是什么。

2) 如何 我是否使用 res 发送 .ics 动态链接 ical.toString() 作为内容。我需要为以下内容创建一个新 View 吗 这个?

编辑:我想对于第二个,我必须像这样设置 HTTP header

//set correct content-type-header
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: inline; filename=calendar.ics');

但是在使用 View 时如何做到这一点。

最佳答案

简单send一旦获得必要的数据,就会得到响应!您不需要直接在路由中 endsend,但也可以在嵌套回调中执行此操作:

router.get('/cal', function(req, res, next) {
var db = req.db;
var ical = new icalendar.iCalendar();

db.find({
evauthor: 'mykey'
}, function(err, docs) {
docs.forEach(function(obj) {
var event2 = ical.addComponent('VEVENT');
event2.setSummary(obj.evics.evtitle);
event2.setDate(new Date(obj.evics.evdatestart), new Date(obj.evics.evdateend));
event2.setLocation(obj.evics.evlocation)
});

res.type('ics');
res.send(ical.toString());
});
});

我还包括使用 res.type 发送正确的 Content-Type .

另外:不要忘记添加适当的错误处理。例如,您可以使用 res.sendStatus(500)如果检索文档时发生错误。

关于node.js - 如何使用node.js发布页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28400618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com