当前位置: 首页 > 知识库问答 >
问题:

无法运行节点。使用express和multer在节点中上载文件的js服务器

楚嘉玉
2023-03-14

我只是一个初学者node.js我会尝试用xpress制作一个站点,这样我就可以在那里上传任何东西。我在我的mac上本地设置服务器

这是我写的代码

server.js

var express = require('express');
var app = express();
var fs = require("fs");

var bodyParser = require('body-parser');
var multers  = require('multer');

app.use(express.static('public'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(multers({ dest: '/public/'}));

app.get('/index.html', function (req, res) {
   res.sendFile( __dirname + "/" + "index.html" );
})

app.post('/file_upload', function (req, res) {
   console.log(req.files.file.name);
   console.log(req.files.file.path);
   console.log(req.files.file.type);
   var file = __dirname + "/" + req.files.file.name;

   fs.readFile( req.files.file.path, function (err, data) {
      fs.writeFile(file, data, function (err) {
         if( err ){
            console.log( err );
            }else{
               response = {
                  message:'File uploaded successfully',
                  filename:req.files.file.name
               };
            }
         console.log( response );
         res.end( JSON.stringify( response ) );
      });
   });
})

var server = app.listen(8081, function () {
   var host = server.address().address
   var port = server.address().port

   console.log("Example app listening at http://%s:%s", host, port)   
})

这些是错误信息

节点上载。js公司

/Users/dayatura/Documents/node/node\u modules/express/lib/application。js:209抛出新的TypeError('app.use()需要中间件函数')^

TypeError:应用程序。use()需要EventEmitter上的中间件函数。在对象中使用(/Users/dayatura/Documents/node/node\u modules/express/lib/application.js:209:11)。(/Users/dayatura/Documents/node/upload.js:10:5)

at模块_编译(module.js:570:32)

at对象。模块_扩展。。js(模块js:579:10)

at模块。加载(模块js:487:32)

at try ModuleLoad(module.js:446: 12)

at功能。模块。_load(module.js:438: 3)

在Module.run(module.js:604: 10)

运行时(bootstrap\u node.js:394:7)

启动时(bootstrap\u node.js:149:9)

请任何人帮忙:)

共有3个答案

翟承志
2023-03-14

我刚刚研究了以上链接中的multer示例

js

var express = require('express');
var app     = express();
var fs      = require("fs");
var multers = require('multer');
var upload  = multers({ dest: '/public/'});

app.get('/index.html', function (req, res) {
   res.sendFile( __dirname + "/" + "index.html" );
})

app.post('/file_upload', upload.array('avatar'), function (req, res) {

   for (var i = 0, len = req.files.length; i < len; i++) {
      var mainFile = req.files[i];
      var file = __dirname + "/" + mainFile.name;

      fs.readFile( mainFile.path, function (err, data) {
         fs.writeFile(file, data, function (err) {
            if( err ){
               console.log( err );
               }else{
                  response = {
                     message :'File uploaded successfully',
                     filename: mainFile.name
                  };
               }
            console.log( response );
            res.end( JSON.stringify( response ) );
         });
      });
   }
})

var server = app.listen(8081, function () {
   var host = server.address().address
   var port = server.address().port

   console.log("Example app listening at http://%s:%s", host, port)   
})
牛兴安
2023-03-14

根据文档,Multer旨在以以下方式使用:

var express = require('express')
var multer  = require('multer')
var upload = multer({ dest: 'uploads/' })

var app = express()

app.post('/profile', upload.single('avatar'), function (req, res, next) {
  // req.file is the `avatar` file
  // req.body will hold the text fields, if there were any
})

app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) {
  // req.files is array of `photos` files
  // req.body will contain the text fields, if there were any
})

有关如何使用multer方法的文档:https://github.com/expressjs/multer#usage

云韬
2023-03-14

这些是问题:

var multer  = require('multer')(({ dest: '/public/'}));

那么你可以这样使用它。

app.post('/upload', multer.single('image'), function(req, res,next){
//Handle image content here.
console.log(req.file); //to access file
});
 类似资料:
  • 我是新来的。js并尝试运行以下培训示例,以在我的mac(OS X Yosemite 10.10.3)上设置基本http服务器: 我在执行代码时遇到以下错误: $节点http.jsevents.js:85抛出er;//未处理的'错误'事件^错误:在导出时监听EADDRINUSE。_errnoException(util.js:746: 11)在服务器。_listen2(net.js:1156: 14

  • 这是我的Node Express代码, 但我将请求正文作为 {} 但在我的网络选项卡在Chrome我可以看到请求有效负载。请注意选项在此POST调用之前被激发。 请求标头 POST/abchttp/1.1 host:localhost:8112连接: 保持活动内容-长度:11 pragma:no-cache cache-control:no-cache 来源:http://localhost:42

  • 我有: 它记录了: 我不明白为什么会这样。

  • 最近我开始使用node。js。当我在我的一个项目中完成一个需求时,我面临一个问题,我应该能够将一些数据动态写入csv文件,并让它作为弹出窗口提示用户下载(如我们通常看到的,带有保存和取消选项)。在谷歌搜索了一段时间后,我决定使用csv npm模块https://github.com/wdavidw/node-csv-parser.我能够将数据写入文件并使用此模块进行保存。我想提示一个弹出窗口来保存

  • 我将如何在节点中对S3上传进行存根。js? 为了获得洞察力,我使用摩卡进行测试,使用Sinon进行存根,但我愿意改变任何事情。我有一个文件,它导出一个执行上载的函数。看起来是这样的: 如果我尝试存根或AWS。S3。原型,没有任何变化。我假设这是因为我的测试需要本身,并且每个函数都有自己的副本。 我的测试是这样的: 这个测试工作正常,但它不会将上传存根到S3,因此上传实际上要经过:X。

  • 我在node js Express中面临一个问题[因为我是node js的新手]。我的用例是我有三个目录[根目录、路由、html文件]。在根目录中,我有一个包含端口信息的index.js文件,在routes目录中,有一个用于提及API的所有路由的route文件。在html文件中,我有静态html文件+client.js文件。当我转到/api/getlist路由时,我正在发送一个html文件。在该h