node.js - 异步功能不起作用

标签 node.js express

下面有我的快速代码

我在做什么::

  1. 我正在重命名在服务器上收到的图像的位置
  2. 我还将图像名称更新到数据库
  3. 我同时做这两件事
  4. 我为此使用异步
<小时/>

我的问题::

  • 所以程序中async中有两个回调
  • 只有我的第一个回调功能有效,另一个则无效 工作
  • 尽管我已经完美地定义了这两项任务,但处理 一次,我无法解决它
<小时/>

app.js

var express=require('express');
var fs=require('fs');
var http=require('http');
var crypto=require('crypto');
var mysql=require('mysql');
var async=require('async');

var app=express();

var connection=mysql.createConnection({
    host: 'localhost',
    user: 'root',
    database: 'ImagePostingDB'
});

connection.connect();
app.set('port',process.env.PORT||7002); 
app.use('/Details',express.static(__dirname+'/public/images')); 
app.use(express.bodyParser());

app.post('/Details/',function(req,res,next)
{
    var file_name=req.files.key.originalFilename;
    console.log(file_name);
    async.series( [
       // Get the first table contents
       function ( callback ) 
       {
          crypto.randomBytes(8, function(ex, buf) {

                var array     = req.files.key.originalFilename.split('.');
                var type      = array[array.length - 1];
                var name      = buf.toString('hex') + '.' + type;

                fs.rename(req.files.key.path, './public/images/' + name, function(e) {


                        if (e) {
                                res.send(500, e.message);
                                } else 
                                {
                                    res.send("I got the message - This i confirm");
                                }

                });
            });
       },
       // Updating the database
       function ( callback ) 
       {

            connection.query('INSERT INTO ImagePostingTABLE (Image_Name) VALUES (?)', [file_name], function (err, rows, fields)
            {
                console.log('Connection result error ' + err);
            });
       }
    ] );
});

app.get('/Details/',function(req,res){
        res.send("Image displayed");
});

http.createServer(app).listen(app.get('port'),function(){
        console.log('Express server listening on port'+app.get('port'));

});
<小时/>

如何解决这个问题

希望我说得清楚

最佳答案

您需要调用传递给async.series任务函数的回调,这是代码

app.post('/Details/',function(req,res,next) {
  var file_name=req.files.key.originalFilename;

  console.log(file_name);
  async.series( [
    // Get the first table contents
    function ( callback ) {
      crypto.randomBytes(8, function(ex, buf) {

        var array = req.files.key.originalFilename.split('.');
        var type  = array[array.length - 1];
        var name  = buf.toString('hex') + '.' + type;

        fs.rename(req.files.key.path, './public/images/' + name, function(e) {

          if (e) {
            res.send(500, e.message);
          } else {
            res.send("I got the message - This i confirm");
          }

          return callback(null);
        });
      });
    },
    // Updating the database
    function ( callback ) {
      connection.query('INSERT INTO ImagePostingTABLE (Image_Name) VALUES (?)', [file_name], function (err, rows, fields) {
        console.log('Connection result error ' + err);
        return callback(null);
      });
    }
  ]);
});

关于node.js - 异步功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20541070/

相关文章:

javascript - Rx.js,Subscribe 被调用时未定义

javascript - 从 gulp 中使用 browserify 时如何将 'require' 暴露给浏览器?

javascript - 从第三个函数的异步第一个函数获取结果的更好方法是什么?

javascript - 在 ejs 循环中无法访问某些对象值

python - 使用 Node js 快速服务器调用 python 脚本

node.js - 如何使用 http POST 方法将当前用户(使用该应用程序的人)的 Firebase Id token 从 Flutter 应用程序发送到restapi?

node.js - 为什么我的 react 形式不能正常工作?

node.js - 带有 Mongoose 调用的 Mocha 测试功能

生产环境中的 Node.js 应用程序部署?

node.js - 发送 ArrayBuffer 或 Blob 并重建它们的正确方法是什么?