Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我想用我的server.js中req.body的新数据填充employeeData_Javascript_Node.js - Fatal编程技术网

Javascript 我想用我的server.js中req.body的新数据填充employeeData

Javascript 我想用我的server.js中req.body的新数据填充employeeData,javascript,node.js,Javascript,Node.js,我想使用函数参数从函数中填充req.body,以执行更新,但它不起作用。下面是我的代码 data-service.js var employees = []; //Here is a function that populate the employees array function initialize() { return new Promise((resolve, reject) => { fs.readFile('./data/employees.json

我想使用函数参数从函数中填充req.body,以执行更新,但它不起作用。下面是我的代码

data-service.js

var employees = [];
//Here is a function that populate the employees array
function initialize() {
    return new Promise((resolve, reject) => {
        fs.readFile('./data/employees.json', (err, data) => {
            if (err) {
                reject(err);
            } else {
                try {
                    employees = JSON.parse(data);
                    resolve(employees);
                } catch (err) {
                    reject('Unable to read file');
                }
            }
        });
        fs.readFile('./data/departments.json', (err, data) => {
            if (err) {
                reject(err);
            } else {
                try {
                    departments = JSON.parse(data);
                    resolve(departments);
                } catch (err) {
                    reject('Unable to read file');
                }
            }
        });
    });
};
如果id与数组中员工的id匹配,则此函数将执行更新

function updateEmployee(employeeData) {
    return new Promise((resolve, reject) => {
        try {
            const newData = [];
            employees.forEach((element) => {
                if (element.employeeNum == employeeData.employeeNum) {
                   //Here I want to populate the employeeData with the new data from req.body in my server.js
                }
            });
        } catch (error) {
            reject(error);
        }
    });
}
这里是在server.js中处理更新的路由

app.post('/employee/update', (req, res) => {
    dataService.updateEmployee(req.body).then(function(data) {
        res.redirect("/employees");
    }).catch((err) => {
        console.log(err);
    });
});
/在这里,我想用我的server.js中req.body的新数据填充employeeData

那没有道理
req.body
是进入服务器的请求的主体。使用
employeeData
中的数据修改
employeeData
(您在
employees
数组中拥有的对象)是有意义的,但不是相反。比如:

function updateEmployee(employeeData) {
    // Not clear why you're using a promise here, but I assume it's to
    // emulate some storage update that would be asynchronous...
    return new Promise((resolve, reject) => {
        try {
            const newData = [];
            for (const employee of employees) {
                if (employee.employeeNum == employeeData.employeeNum) {
                   // Perhaps
                   employeePropertyNames.forEach(name => {
                       // There may be a couple you want 
                       if (employeeData.hasOwnProperty(name)) {
                           element[name] = employeeData[name];
                       }
                   });
                   // Or: Object.assign(employee, employeeData); -- But NOT A GOOD IDEA
                   resolve(employee);
                   break;
                }
            }
        } catch (error) {
            reject(error);
        }
    });
}
…其中
employeePropertyNames
是您希望允许通过客户端请求更新的员工属性名称的列表


使用blind
Object.assign
不是一个好主意,因为它允许客户端请求进行它想要的任何更改(包括添加全新的属性),其中可能有些东西(如
employeeNum
)不应该更改。

什么不起作用?目前,您只是在搜索员工,但不必搜索任何与接收到的数据有关的内容。此外,您的承诺永远不会解决,因此您的路由永远不会到达
res.redirect()
此外,您的初始化有一个竞争条件。您有一个承诺,但您正在异步读取两个文件。其中一个文件将首先处理,然后承诺解决(无论是与员工还是部门,无论是先完成的)或拒绝。您将无法获得另一个文件的解析或拒绝。我建议使用类似于
Promise.all()
的方法,并使每个文件的初始化成为自己的承诺。谢谢。它成功了,我得到了你的解释,我已经重构了我的代码以更好地工作。