Node.js 需要帮助与Heroku&;一起使用MongoDB吗;节点,快车
我的项目目标是制作一个类似清单的web应用程序,用户可以在其中查看数据库中的内容并更新其中的内容 数据库很简单。只是列出最喜欢的东西。例如{“最爱”:“派”},{“最爱”:“基蒂”} 到目前为止,我已经知道如何连接到数据库(MongoHQ)并显示单个数据元素。我已经试了好几个小时了,但是我被难住了:Node.js 需要帮助与Heroku&;一起使用MongoDB吗;节点,快车,node.js,mongodb,heroku,express,swig-template,Node.js,Mongodb,Heroku,Express,Swig Template,我的项目目标是制作一个类似清单的web应用程序,用户可以在其中查看数据库中的内容并更新其中的内容 数据库很简单。只是列出最喜欢的东西。例如{“最爱”:“派”},{“最爱”:“基蒂”} 到目前为止,我已经知道如何连接到数据库(MongoHQ)并显示单个数据元素。我已经试了好几个小时了,但是我被难住了: 让html文件写入数据库中的任何数据 写入Post表单以写入数据库 请分享一些见解 这是我的密码 .html <!DOCTYPE html> <html> <head&
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div>
<h1>Notepad</h1>
<p>Favorite things: {{favorite}}</p>
<!-- {% for favorite in doc %} <-this doesn't work!
<p>Favorite things: {{favorite}}</p>
{% endfor %}
-->
</div>
</body>
</html>
便条簿
最喜欢的东西:{{Favorite}
web.js
var express = require('express');
var path = require('path');
var fs = require('fs');
var http = require('http');
var mongo = require('mongodb');
var MongoClient = mongo.MongoClient;
var Server = require('mongodb').Server;
var mongoUri = "mongodb://id:pass@ds------.mongolab.com:-----/heroku_app------";
var cons = require('consolidate');
var app = express(express.logger());
app.engine('html', cons.swig);
app.set('view engine', 'html');
app.set('views', __dirname + '/views');
app.set('port', process.env.Port || 8080);
app.use(express.bodyParser());
var mydatabase = null;
var myCollection = null;
MongoClient.connect(mongoUri, function(err, db){
if(!err){
console.log("We are connected to mongo_lab!");
}
mydatabase = db;
mydatabase.createCollection('test2', function(err, collection){});
myCollection = mydatabase.collection('favorites');
//myCollection.insert({'favorite':'Blueberries'}, {w:1}, function(err, result){});
});
var mongoclient_server = new MongoClient(new Server('localhost', 27017));
function errorHandler(err, req, res, next){
console.error(err.message);
console.error(err.stack);
res.status(500);
res.send("Fix the dam Error!");
}
app.use(errorHandler);
app.get('/notepad', function(req, res, next){
MongoClient.connect(mongoUri, function(err, db){
mydatabase.collection("favorites").find().toArray(function(err, doc){
if(err) throw err;
console.log(doc);
res.render('notepad', doc[0]);
});
});
});
var htmlfile = "index.html";
app.get('/', function(request, response) {
var html = fs.readFileSync(htmlfile).toString();
response.send(html);
});
var port = process.env.PORT || 8080;
app.listen(port, function() {
console.log("Listening on " + port);
});
//mongoclient_server.open(function(err, mongoclient_server){ <--if I use this, heroku crashes
// if(err) throw err;
// app.listen(port);
//});
var express=require('express');
var path=require('path');
var fs=需要('fs');
var http=require('http');
var mongo=require('mongodb');
var MongoClient=mongo.MongoClient;
var Server=require('mongodb')。Server;
var mongoUri=”mongodb://id:pass@ds------mongolab.com:-----/heroku_应用程序----“;
var cons=要求(“合并”);
var app=express(express.logger());
app.engine('html',cons.swig);
app.set('view engine','html');
app.set('views','u dirname+'/views');
应用程序集('port',process.env.port | | 8080);
app.use(express.bodyParser());
var mydatabase=null;
var myCollection=null;
MongoClient.connect(mongoUri,函数(err,db){
如果(!err){
log(“我们已连接到mongo_实验室!”);
}
mydatabase=db;
createCollection('test2',函数(err,collection){});
myCollection=mydatabase.collection('favorites');
//insert({'favorite':'Blueberries'},{w:1},函数(err,result){});
});
var mongoclient_server=new mongoclient(新服务器('localhost',27017));
函数errorHandler(err、req、res、next){
控制台错误(错误消息);
控制台错误(错误堆栈);
物质状态(500);
res.send(“修复dam错误!”);
}
应用程序使用(errorHandler);
app.get('/notepad',函数(req,res,next){
MongoClient.connect(mongoUri,函数(err,db){
mydatabase.collection(“收藏夹”).find().toArray(函数(err,doc){
如果(错误)抛出错误;
控制台日志(doc);
res.render('notepad',doc[0]);
});
});
});
var htmlfile=“index.html”;
app.get('/',函数(请求,响应){
var html=fs.readFileSync(htmlfile.toString();
response.send(html);
});
var port=process.env.port | | 8080;
app.listen(端口,函数(){
console.log(“监听”+端口);
});
//mongoclient_server.open(函数(err,mongoclient_server){您将数据从doc[0]
作为局部变量传递到notepad
视图,因此基本上notepad
局部变量就是doc[0]
中的内容
在调用res.render()
时,应指定文档位于doc
本地,如下所示:
res.render('notepad', {
doc: doc
});
这样您的{%for…%}
就可以工作了
你能发布文档的完整结构吗?你的逻辑似乎是针对这样的东西:doc=['favorite1'、'favorite2'、…]
我现在只有一个虚拟数据,其中有一个键值对{“favorite”:“blueberry”}。我正在尝试制作记事本,以便您可以向列表中添加更多喜爱的内容。我想我应该将文档扩展为{“favorite”:[“blueberry”,“apple”,kitten”]}?是的,然后在模板中您需要引用该数组属性,如:{doc.favorite%]中的favorite
我认为关键在于nunjucks语法:{%forfavorite in doc%}
相当于for(doc.favorite中的var项){
普通javascript。您需要的是{%forfavorite in doc.favorite%}
这是for(doc.favorite中的var项){