Express 3.4.8 照片上传问题-不使用bodyParser()如何解决?

2023-12-22

我在 Gist 的代码: https://gist.github.com/yhagio/10654836 https://gist.github.com/yhagio/10654836

我是 Express 新手,尝试从《Node.js in Action - Chapter.9》(上传照片)一书中的示例进行尝试。 作者使用 Express 版本“3.4.0”,但我使用“3.4.8”,我遇到了这个问题,

当我尝试上传图片时出现错误消息:

500 TypeError: Cannot read property 'photo' of undefined

路线/photos.js

...
exports.submit = function (dir) {
  return function (req, res, next) {
    var img = req.files.photo.image; // ---- This 'photo' part is undefined
    var name = req.body.photo.name || img.name;
    var path = join(dir, img.name);

    fs.rename(img.path, path, function (err) {
      if (err) { return next(err); };

      Photo.create({
          name:name,
          path:req.name
        }, function (err) {
        if (err) { return next(err); };
        res.redirect('/');
      });
    });
  };
}; 

但我发现在我的 app.js 中(bodyParser() 自 3.4.8 起不再使用)

app.js(在我的代码 Express 3.4.8 中)

...
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());       // Instead of bodyParser()
app.use(express.urlencoded()); // Instead of bodyParser()
...

但在作者的代码中有bodyParser()。

app.js(作者使用Express 3.4.0

...
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser()); // This is no longer used in latest version

所以,我想知道是否可以通过使用 multer 来解决这个问题(http://expressjs-book.com/forums/topic/replacement-for-bodyparser-connect-multipart/ http://expressjs-book.com/forums/topic/replacement-for-bodyparser-connect-multipart/):

app.use(express.json());       
app.use(express.urlencoded());
app.use(multer({ dest: './public/photos' })); // I tried this

这并没有解决。请帮我。谢谢。

更新:我想出的解决方案

该代码有效(routes/photos.js)

exports.submit = function (dir) {
  return function(req, res, next){
    var form = new multiparty.Form();
    form.parse(req, function(err, fields, files){
      var img = files.image[0];
      var name = fields.name || img.originalFilename;
      var path = join(dir, img.originalFilename);
      fs.rename(img.path, path, function(err){
        if(err){return next(err); };
        Photo.create({
          name: name,
          path: img.originalFilename
        }, function(err){
          if(err){return next(err); };
          res.redirect('/');
        });
      });
    });
  };
}; 

你给过吗节点多方 https://github.com/andrewrk/node-multiparty尝试一下?以下是自述文件中的示例用法:

var multiparty = require('multiparty')
  , http = require('http')
  , util = require('util')

http.createServer(function(req, res) {
  if (req.url === '/upload' && req.method === 'POST') {
    // parse a file upload
    var form = new multiparty.Form();

    form.parse(req, function(err, fields, files) {
      res.writeHead(200, {'content-type': 'text/plain'});
      res.write('received upload:\n\n');
      res.end(util.inspect({fields: fields, files: files}));
    });

    return;
  }

  // show a file upload form
  res.writeHead(200, {'content-type': 'text/html'});
  res.end(
    '<form action="/upload" enctype="multipart/form-data" method="post">'+
    '<input type="text" name="title"><br>'+
    '<input type="file" name="upload" multiple="multiple"><br>'+
    '<input type="submit" value="Upload">'+
    '</form>'
  );
}).listen(8080);

作者(安德鲁·凯利)推荐 http://andrewkelley.me/post/do-not-use-bodyparser-with-express-js.html避免 bodyParser,所以你避免它是正确的,但 multiparty 似乎为我解决了类似的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Express 3.4.8 照片上传问题-不使用bodyParser()如何解决? 的相关文章

  • 如何调试 Gulp 任务?

    如何调试我的中定义的 gulp 任务gulpfile js使用诸如 Google Chrome 调试器之类的调试器逐行单步执行任务的代码 对于 Node js 6 3 版本 您可以使用 inspect flag https nodejs o
  • HTML 上传 MAX_FILE_SIZE 似乎不起作用

    我想知道隐藏字段是如何命名的MAX FILE SIZE应该工作吗
  • 如何在Windows的node js中设置默认时区

    我正在尝试在应用程序启动时设置时区 set TZ UTC node main js 但这不起作用 main js var tz process env TZ var date new Date console log tz date UTC
  • 使用Nodejs、Express和AngularJS在浏览器中显示IP

    我正在学习 Nodejs 和 ExpressJS 我正在尝试使用 ExpressJS 和 2 个节点模块 请求IP https www npmjs com package request ip and geoip2 https www np
  • 为什么changeResourceRecordSets没有被授权访问此资源?

    我正在尝试在 Route 53 中创建一条别名类型的新记录 以告诉 Route 53 起诉 CloudFront 来为该站点提供服务 我正在尝试使用以下代码来执行此操作 let options ChangeBatch Changes Act
  • Node Sequelize - “按原样”插入日期而不转换为 UTC

    我正在尝试运行一个简单的查询 例如 Insert into table somedate values 2018 06 11 23 59 00 但 Sequelize 将其执行为 Insert into table somedate val
  • 让 babel 排除测试文件

    在我的构建步骤中 我使用 babel 将代码转译为 es5 从src to dist 如何让它排除以以下结尾的文件 test js 包 json scripts build babel src out dir dist babelrc pr
  • 节点:以编程方式检查包的最新版本

    我希望我的节点包 在 npm 上发布 在新版本可用时提醒用户 如何以编程方式检查已发布软件包的最新版本并将其与当前版本进行比较 Thanks 您可以结合npmview https npmjs com package npmview 用于获取
  • 在 Google App Engine 上连接 Mongoose

    我已在 Google App Engine 上成功部署了自定义 Node js 应用程序 但是 我在启动应用程序时遇到问题 因为猫鼬在尝试连接时超时 令人沮丧的是 猫鼬在我的本地计算机上以完全相同的参数连接得很好 我的 MongoDb UR
  • “gulp”不被识别为内部或外部命令

    我正在尝试使用Gulp http gulpjs com and Node Js https nodejs org en 流式传输我的生产过程中缩小和连接 CSS JS 文件的过程 这是我所做的 我安装了Node Js https nodej
  • 如何在 Sequelize 现有模型中添加列?

    我使用此命令添加了模型和迁移文件 node modules bin sequelize model generate name User attributes firstName string lastName string email s
  • 缓存消息discord.js

    我想做一些反应角色 但为此 我必须缓存机器人启动之前发送的消息 我尝试过channel messages fetch 但到目前为止还没有奏效 我当前的代码 client on messageReactionAdd async reactio
  • MongooseError:操作 `orders.deleteMany()` 缓冲在 10000 毫秒后超时

    当我运行我的应用程序时npm run seeder然后我面临这个错误 我仔细检查了我的数据库连接 没问题 另外 我检查了我的 ordermodels 文件也没有问题 我用过MongoDB的compass没有任何问题 我不知道为什么显示buf
  • 如果 Grunt 任务的子任务之一失败,如何使其失败?

    我在 grunt 中有一个构建任务 如下所示 grunt registerTask build jshint uglify 问题是 即使 jshint 任务失败 uglify 任务也会运行 如果它的子任务之一失败 如何使 build 任务终
  • 上传文件 WCF Web API 端点

    有没有办法将文件上传到 WCF Web API 端点 如果是这样 我如何访问 Network Stream 来读取数据 很感谢任何形式的帮助 Thanks 假设您正在谈论客户端 一种方法是创建一个派生自 HttpContent 的 File
  • 可注入的“PlatformLocation”需要使用JIT编译器进行编译,但“@angular/compiler”不可用

    我的 Angular 应用程序通过 Node 16 13 0 提供服务 更新到 Angular 13 后 我收到以下错误 可注入 class PlatformLocation 的 JIT 编译失败 文件 Users btaylor work
  • 多次训练brain.js?

    在第一次训练后 如何将新信息 仅新信息 而不是所有信息 因为这会花费太多性能 训练到我的用 Brain js 制作的神经网络 它有点粗糙 但您可以使用以下结构来实现 如果我们加入 2 个训练数据集 旧数据集与新数据集 然后重新训练keepN
  • 如何用 JavaScript 修复图像透视变形和旋转?

    我有一些用手机拍摄的图像 有没有可以拉直纸张照片并将其压平的 JavaScript 库 例如 我想创建一个矩形图像 该图像没有任何失真 换句话说我想知道如何用 JavaScript 修复透视变形和旋转 例如 我发现下面的示例图像来自this
  • 将项目中的node_modules集中到子项目中

    是否可以以在中心点上拥有所需模块的方式配置 grunt 我有以下项目结构 Project subproject subproject subproject 我通过 grunt 构建项目的所有子项目 并且我也可以为自己构建每个子项目 目前 我
  • 如何清除node.js中的超时

    您好 我们正在使用 node js socket io 和 redis 开发应用程序 我们有这个程序 exports processRequest function request result var self this var time

随机推荐

  • 将 JSON 单个字符串反序列化为数组

    我正在尝试反序列化我的 json 数据 但是我的类未正确设置 我无权更改 json 响应 因此我需要编写一个函数来正确处理 json 这是数据 blabla Score 1 Ref 50 foo colour Yellow ref y50
  • 字符串超过 maxJsonLength 且小于 250kb

    我将实体与ajax 一起使用 我想要在使用 JavaScript 创建的网格中使用实体框架提供的完整表格 我当前发送的表格少于 140 行 如果表中只有 50 行 那么我的代码就可以工作 并且出现以下错误 Message Error dur
  • 从 C 包装器调用 R 函数

    我有一个像这样的函数 callFunc lt function f f 1 f可以是 例如 f lt function x x 为了简化事情 假设我知道 f 应该返回一个数字并接受一个数字 我想搬家callFunc到C 但仍然有功能f在 R
  • 循环从节点 Promise 返回的对象并提供给下一个 .then

    我似乎永远被这个问题困扰了 我刚刚进入节点 并开始思考承诺等 我想做的是从 Spotify API 获取数据 我做的第一件事就是获取我自己的播放列表 function getPlaylists access token var option
  • 如何使用 jQuery 从文件添加内容?

    我有主要的html文档 div div 我还有一个内容文件 不是 html 文档 只是 html 代码 div class CodeRay div class code pre span class no 1 span require pr
  • 神经网络初始化 - Nguyen Widrow 实现?

    我尝试过实现 Nguyen Widrow 算法 如下 它似乎运行正常 但我有一些后续问题 这看起来像一个正确的实现吗 Nguyen Widrow 初始化是否适用于任何网络拓扑 尺寸 即5层自动编码器 Nguyen Widrow 初始化对任何
  • 性能和耐久性存储API(块存储)

    我们是 DST India 团队的一员 目前我们正在为客户提供一项产品 我们尝试使用 SoftLayer 提供的 REST API 将 SoftLayer 的性能和耐用存储功能集成到 ICO 中 我已经浏览了 SoftLayer 文档 但找
  • 在电子邮件中附加多种图像格式,而不仅仅是 JPG

    这就是我到目前为止所拥有的 MemoryStream imgStream new MemoryStream System Drawing Image img System Drawing Image FromStream fuImage P
  • 如何在Python中连接字符串和数字? [复制]

    这个问题在这里已经有答案了 我试图在Python 中连接一个字符串和一个数字 当我尝试这样做时 它给了我一个错误 abc 9 错误是 Traceback most recent call last File
  • HashMap 和 int 作为键

    我正在尝试构建一个 HashMap 它将整数作为键 将对象作为值 我的语法是 HashMap
  • Win2008 R2 上的 MSMQ 不会接收来自旧客户端的消息

    我在这里遇到一个非常奇怪的问题 我有一台安装了消息队列的 Windows 2008 R2 服务器 在另一台计算机上 运行 Windows 2003 的服务被设置为将消息发送到 2008 服务器上的公共队列 但是 消息永远不会显示在服务器上
  • 视频文件的下载链接

    我有一个视频想要提供下载链接 然而 创建了一个简单的 a href myvideo mp4 Download a 标签 当我点击它 在 Firefox 和 Chrome 中 时 它开始播放视频而不是允许下载视频 有没有一种方法可以在所有当前
  • 在 PHP 中如何不允许用户在注销后返回?

    我刚刚编写了一个PHP登录脚本 我想要完成的是 当用户单击注销链接时 在注销后 无论单击浏览器的后退按钮 他们都无法访问该页面 这是注销功能 Start the Session session start session destroy h
  • 如何在 DTrace 操作中打印 CFStringRef?

    我有一个 DTrace 探针捕获对函数的调用 该函数的参数之一是CFStringRef 这是保存指向 unicode 字符串的指针的私有结构 但是CFStringRef本身不是一个char 所以普通的 DTrace 方法如copyinstr
  • 使用 xdebug 和 netbeans 调试 php-cli 脚本?

    我已设法从 IDE 本身启动 php cli 脚本调试会话 但我需要从 shell 命令行启动调试会话 这些是相当复杂的维护 PHP 脚本 需要大量输入参数 因此从 Netbeans 中输入参数有点麻烦 我之前用 Zend studio 做
  • XML 模式中的递归?

    我需要创建一个 XML 模式来验证 XML 文档的树结构 我不确切知道树的出现次数或深度级别 XML 示例
  • CPython 源 - 如何构建静态 python26.lib?

    我正在尝试使用 Cython 将 hello pyx 文件编译为 exe 第一步是使用命令 cython cplus embed hello pyx 将 hello pyx 编译为 hello cpp 文件 Embed选项意味着Genera
  • Sublime Text - 选择最后一个增量选择的元素?

    I recently discovered the insanely useful ctrl D functionality in sublime text With a careful eye it s almost as functio
  • AngularJS ng-model 的默认值

    是否可以使 ng models 获得默认值 例如 我有一个使用了 jQuery 的表单serialize函数 每当 a 值不存在时 它仍然会将其包含在序列化数据中 例如 name age 但是 当我使用尝试使用 Angular 发布它时 h
  • Express 3.4.8 照片上传问题-不使用bodyParser()如何解决?

    我在 Gist 的代码 https gist github com yhagio 10654836 https gist github com yhagio 10654836 我是 Express 新手 尝试从 Node js in Act