Node.js backbonejs节点文件上载

Node.js backbonejs节点文件上载,node.js,backbone.js,upload,Node.js,Backbone.js,Upload,我在任何地方找到的答案都不起作用。我试图在开发Backbone.js应用程序以上载文件时扩展该示例。尽管表单具有enctype=multipart/form数据,但request.files始终未定义 HTML格式为: <form id="addBook" action="..." enctype="multipart/form-data"> <div> <label for="coverImage">CoverImage: </

我在任何地方找到的答案都不起作用。我试图在开发Backbone.js应用程序以上载文件时扩展该示例。尽管表单具有enctype=multipart/form数据,但request.files始终未定义

HTML格式为:

<form id="addBook" action="..." enctype="multipart/form-data">
    <div>
        <label for="coverImage">CoverImage: </label><input id="coverImage" name="coverImage" type="file" />
        <label for="title">Title: </label><input id="title" type="text" />
        <label for="author">Author: </label><input id="author" type="text" />
        <label for="releaseDate">Release date: </label><input id="releaseDate" type="text" />
        <label for="keywords">Keywords: </label><input id="keywords" type="text" />
        <button id="add">Add</button>
  </div>
</form>
正在调用的节点

//Insert a new book
app.post( '/api/books', function( request, response ) {
    console.log(request.body);
    console.log(request.files);
});
coverimage send to node的值是正确的,我只是从未在request.files中获得任何内容。我有一个很酷的拖放,我想用它来代替,但直到我得到这个工作,我卡住了

我尝试了JQuery文件上传,但没有结果


如果我有头发,我现在就会把它拔出来。

我不会将文件作为model.save/collection.createmodel的一部分提交

我使用的是文件上传管理器,将文件提交给上传处理程序。此上载处理程序返回上载文件的路径,如果数据库表中存储了引用,则返回fileId


从那里,我在主干模型中填充一个属性,然后持久化该模型。你可以将你的模型登录到plupload,以完成上传活动或类似活动。

结果我不得不雇佣一个人来完成,因为我在网上找不到任何人通过主干上传文件的例子,即使没有更新任何数据库交互。每个人对于使用什么工具上传文件都有相同的基本建议,但我一辈子都找不到一个实现它的例子


我计划让所有人都可以使用这些代码,这样他们就可以看到它是如何工作的。

我还学习了《开发主干网应用程序》一书中的示例,我扩展了该功能,将图像上传到服务器中的文件夹,并将路径保存在我的模型中,以显示正确的图像。它工作得很好。我尝试使用Plupload和其他jquery插件,但我不喜欢它们。我的示例是使用ajax将图像上传到服务器,然后使用它们。我读过许多文章,其中提到使用iframe来实现ajax功能。我发现最好的方法是使用jquery.form.js避免回发并以一种好的方式加载图像

正在运行的示例与nodeJS配合良好:

我的解决方案基于Mark Dawson的帖子:

然而,我必须纠正这篇文章的一个方法,使其正确工作:

app.post('/api/photos', function(req, res) {
var responseServerPath = 'images/' + req.files.userPhoto.name;
var serverPath = 'site/images/' + req.files.userPhoto.name;
console.log(req.files.userPhoto.path);
require('fs').rename(
    req.files.userPhoto.path,
    serverPath,
    function(error) {
        if(error) {
            console.log(error);
            res.send({
                error: 'Ah crap! Something bad happened'
            });
            return;
        }

        res.send({
            path: responseServerPath
        });
    }
);
});

我希望这会有帮助。

我对主干网很陌生,我根本不知道如何开始。你有简单的例子吗?我只需要一个基本的例子,一个单一的文件上传。稍后我可以找出侦听器,但我无法让上载按钮与主干网一起在页面上工作,而且我不知道当用户单击上载时如何上载文件。我无法提供基本示例,因为我认为您的文件上载不应该通过典型的主干网同步进行。我的建议是,你开发一些东西来上传一个文件,然后在你的图书模型上设置对该文件的引用,然后同步该文件。您将模型放到后端似乎没有问题,因此您的问题在于上传。至于如何组合文件和模型,我已经解释了我以前是如何做的。这就是为什么我开始这个线程,以找出如何上传文件。在如何通过主干网做到这一点上,我还没有取得任何进展。我希望在这方面能得到帮助,很抱歉我不清楚。这个例子不是通过主干上传文件的例子,这正是你的问题所要求的。这是一个通过JavaScript上传文件的示例。
app.post('/api/photos', function(req, res) {
var responseServerPath = 'images/' + req.files.userPhoto.name;
var serverPath = 'site/images/' + req.files.userPhoto.name;
console.log(req.files.userPhoto.path);
require('fs').rename(
    req.files.userPhoto.path,
    serverPath,
    function(error) {
        if(error) {
            console.log(error);
            res.send({
                error: 'Ah crap! Something bad happened'
            });
            return;
        }

        res.send({
            path: responseServerPath
        });
    }
);
});