- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试为我之前的帖子找到解决方案:Mongo gives duplicate key error on _id_ field in Meteor application
为了做到这一点,我想在服务器端从我的 CSV 文件中读取数据,而不是从客户端读取数据。
首先我尝试了这篇文章中的解决方案 Using node-csv and meteor-file to import CSV into a collection但 meteor-file 不再与当前版本的 Meteor 兼容。我也在这篇文章中尝试了解决方案 Upload Data to Meteor / Mongo DB但它也在客户端上,该解决方案会产生与我之前的帖子相同的错误。
经过进一步研究后,我尝试使用以下代码读取数据。但是它不起作用:
首先我创建了一个集合:
Meteor.orders = new Meteor.Collection('Orders');
我定义了以下模板来读取 csv 文件:
<template name="read_file_orders">
<form class="well form-inline">
<label class="control-label" for="fileInput2">Kies bestand</label>
<input class="input-file" id="fileInput2" type="file" name="files[]">
<Button class="btn btn-primary" id="read_orders">Importeer</button>
<button class="btn btn-danger" id="erase_orders">Wis gegevens</button>
</form>
</template>
这是客户端javascript:
Template.read_file_orders.events({
"click #read_orders" : function(e) {
var f = document.getElementById('fileInput2').files[0];
console.log("read file");
readFile(f, function(content) {
Meteor.call('upload',content);
});
}
});
readFile = function(f,onLoadCallback) {
var reader = new FileReader();
reader.onload = function (e){
var contents=e.target.result
onLoadCallback(contents);
}
reader.readAsText(f);
};
这是服务器 javascript:
Meteor.startup(function () {
// code to run on server at startup
return Meteor.methods({
upload : function(fileContent) {
console.log("start insert");
import_file_orders(fileContent);
console.log("completed");
}
});
});
import_file_orders = function(file) {
var lines = file.split('%\r\n');
var l = lines.length - 1;
for (var i=0; i < l; i++) {
var line = lines[i];
var line_parts = line.split('|');
var ex_key = line_parts[0];
var ex_name = line_parts[1];
var clin_info = line_parts[2];
var order_info = line_parts[3];
var clinician_last_name = line_parts[4];
var clinician_first_name = line_parts[5];
var clinician_code = line_parts[6];
var clinician_riziv = line_parts[7]
var pat_id = line_parts[8];
Meteor.orders.insert({Patient:pat_id, Exam_code:ex_key, Exam_name:ex_name, Clinical_info:clin_info, Order_info:order_info, Clinician_first:clinician_first_name, Clinician_last:clinician_last_name, Clinician_c_code:clinician_code, Clinician_riziv:clinician_riziv, Planned:null});
console.log("%");
};
当我尝试读取文件时,没有任何反应。只有控制台日志出现在服务器控制台中,但没有导入任何内容。甚至没有创建 Orders 集合。
很明显我做错了什么,但我不知 Prop 体是什么。但是我认为解决方案并不太远。也许你们中有人可以告诉我正确的方向?
亲切的问候
编辑:
为了回复 revmen 的回答,这里是我的测试应用程序的完整代码:
测试.html:
<head>
<title>test</title>
</head>
<body>
<h1>Welcome to Meteor!</h1>
{{> read_file_orders}}
</body>
<template name="read_file_orders">
<form class="well form-inline">
<label class="control-label" for="fileInput2">Kies bestand</label>
<input class="input-file" id="fileInput2" type="file" name="files[]">
<Button class="btn btn-primary" id="read_orders">Importeer</button>
<button class="btn btn-danger" id="erase_orders">Wis gegevens</button>
</form>
</template>
测试.js
Orders = new Mongo.Collection("orders");
if (Meteor.isClient) {
// counter starts at 0
Template.read_file_orders.events({
"click #read_orders" : function(e) {
var f = document.getElementById('fileInput2').files[0];
console.log("read file");
readFile(f, function(content) {
Meteor.call('upload',content);
});
}
});
import_file_orders = function(file) {
console.log("enter function import_file_orders")
var lines = file.split(/\r\n|\n/);
var l = lines.length - 1;
for (var i=0; i < l; i++) {
var line = lines[i];
var line_parts = line.split(',');
var ex_key = line_parts[0];
var ex_name = line_parts[1];
var clin_info = line_parts[2];
var order_info = line_parts[3];
var clinician_last_name = line_parts[4];
var clinician_first_name = line_parts[5];
var clinician_code = line_parts[6];
var clinician_riziv = line_parts[7]
var pat_id = line_parts[8];
var result = Orders.insert({Patient:pat_id, Exam_code:ex_key, Exam_name:ex_name, Clinical_info:clin_info, Order_info:order_info, Clinician:{first:clinician_first_name, last:clinician_last_name, c_code:clinician_code, riziv:clinician_riziv}, Planned:null});
console.log(Orders.findOne(result));
};
}
readFile = function(f,onLoadCallback) {
//When the file is loaded the callback is called with the contents as a string
var reader = new FileReader();
reader.onload = function (e){
var contents=e.target.result
onLoadCallback(contents);
}
reader.readAsText(f);
};
}
if (Meteor.isServer) {
Meteor.startup(function () {
// code to run on server at startup
});
Meteor.methods({
upload : function(fileContent) {
console.log("start insert");
import_file_orders(fileContent);
console.log("completed");
}
});
}
最佳答案
你们很亲密。我只需要进行一些更改即可使其正常工作。
我不知道你的 .csv 文件是什么样的,所以我做了一个这样的:
A1, B1, C1, D1, E1, F1, G1, H1, I1
A2, B2, C2, D2, E2, F2, G2, H2, I2
您的 file.split 操作不是拆分行,而是将所有内容放在一条大行上。我这样做了并且成功了:
var lines = file.split(/\r\n|\n/);
这将单独的行拆分为数组的成员。然后我假设,因为您将输入称为 CSV,所以您的值用逗号分隔,而不是竖线。所以我把你的 line.split 改成了这个
var line_parts = line.split(',');
我所做的其他更改可能不是导致您失败的原因,但这是我认为事情通常完成的方式...
而不是像这样声明你的集合
Meteor.orders = new Meteor.Collection('Orders');
我是这样做的
Orders = new Mongo.Collection("orders");
请注意,这是由服务器和客户端运行的。
我只是将其放入服务器代码(而不是 Meteor.start 中),而不是您在服务器上声明方法的方式:
Meteor.methods({
upload : function(fileContent) {
console.log("start insert");
import_file_orders(fileContent);
console.log("completed");
}
});
当然,我更改了 import_file_orders 函数底部的插入行
var result = Orders.insert({Patient:pat_id, Exam_code:ex_key, Exam_name:ex_name, Clinical_info:clin_info, Order_info:order_info, Clinician_first:clinician_first_name, Clinician_last:clinician_last_name, Clinician_c_code:clinician_code, Clinician_riziv:clinician_riziv, Planned:null});
console.log(Orders.findOne(result));
编辑问题中更新的代码:
将 import_file_orders 函数从客户端 block 移动到服务器 block 。
关于javascript - 如何将数据从 CSV 文件导入服务器端的 Meteor 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29015201/
我在使用 Jade 和 express 时遇到了一些问题。这是 serder 端: router.get('/login', function (req, res) { res.status(2
是否可以使用 JavaScript 服务器端,从而在某些核心计算中不会显示在页面源代码中? 我正在开发一款游戏,代码的一个关键部分只需要在服务器端计算然后传回客户端。 我的整个游戏都是用 Javasc
我正在寻找有关如何使用 ExtJS 4 实现安全页面的信息。我所说的安全页面是指用户将使用 Siteminder (SSO) 登录我们的网站,因此我们将拥有用户的身份。然后我们将通过进行数据库/LDA
我的 Centos 7 服务器正在运行 apache 2.4.6,并且正在使用 mod_wsgi 提供 django webapp。我的问题是我无法从另一台计算机的浏览器访问服务器 url。我没有从
我们收到了客户的请求,要求我们基于 ExtJS 框架构建 Web 应用程序。我查看了互联网,发现 ExtJs 只是一个客户端 javascript 控件,但我认为 Web 应用程序也必须具有服务器端
我有三个组件。 组件一包含组件二和三。 组件二是一个列表。 组件三用于向数据库添加项目。 当我将一个项目保存到数据库时,我想更新组件二中的列表。 我怎么做? 最佳答案 设想 让我们假设:
欢迎, 我正在寻找能使我以尽可能高的格式下载youtube视频的youtube api。 几年前,这项工作更为简单,因为url拥有关于质量的信息,例如“fmt = 22”或“fmt = 6”,我们现在
我想将电子邮件 x@x.com 的用户密码设置为“an”。但代码不起作用。这是我的云代码: Parse.Cloud.define('testSetPasswordForUser', functio
正在阅读http://cocoawithlove.com/2010/03/streaming-mp3aac-audio-again.html这篇文章,想知道如何在服务器端实现它,是否像将文件放在htd
我有一个使用一些 css/javascript 选项卡的 php 脚本,它们在我的本地服务器上运行,但当我上传到我的在线服务器时则不起作用。 只是想知道是否有人知道为什么会出现这种情况?所有路径都
是否可以从 JavaScript 脚本获取服务器端页面的源代码?我希望能够获取服务器上同一文件夹中的页面的源代码。除了javascript之外,是否可以不使用任何其他东西? 最佳答案 如果您想从 ja
.NET 4.0 我正在寻找在我们的服务器上生成Word文档的最简单方法。 局限性: 服务器端 我不想在服务器上安装word 数据源是XML 我试图用XSLT生成快速简单的DOCX,但是我可以找到的用
我正在使用 native jQuery 验证库来验证在联系表单中输入的电子邮件地址。由于这是一个表达式引擎站点,因此我使用其电子邮件验证器作为服务器端备份。 当我输入 test@b.c 时,jQuer
我使用带有服务器端处理的数据表来显示数万行。我需要通过复选框过滤这些数据。我能够制作一个工作正常的复选框,但我不知道如何添加多个复选框以协同工作。我找到了 similar solution在这里,但我
我正在尝试编写一个消息传递应用程序,并且我能够发送消息(显示为服务器客户端正确显示消息)但随后将我的客户端踢出服务器。服务器打印以下错误: java.io.EOFException at java.i
如果设备是移动设备,如何防止侧边栏加载服务器端资源?我了解如何通过 CSS 隐藏,但我更感兴趣的是防止对服务器的调用。 最佳答案 WordPress有一个名为wp_is_mobile()的函数它将检查
我有一个返回 text/event-stream 数据的网址,因此我尝试连接并打印我找到的所有内容: var url = "..." var source = new EventSource(url)
我得到这样的错误列表:{ error: [ "Email is required", "First Name is required"] } 我需要如何修改它,以获取包含字段名称的列表? public
我正在尝试使用 ASIFormDataRequest 将数据发送到 ASP.net 服务器端。我创建了一个aspx页面。目前我可以得到这两个纯文本。但是我不知道如何通过 Request.Form 在
我在 ${host}/api/graphql 有一个可通过 POST 访问的快速 graphql 端点。 在那条路线上,我有身份验证中间件,如果用户未登录,我想重定向到登录页面。 看起来有点像这样。
我是一名优秀的程序员,十分优秀!