Node.js 为节点中安装的网络驱动器设置路径

Node.js 为节点中安装的网络驱动器设置路径,node.js,networking,fs,Node.js,Networking,Fs,我正在尝试使用windows网络驱动器模块和fs模块写入映射的网络驱动器输入节点 如何获取连接和写入远程位置的路径 我需要通过驱动器号吗?如果是,我如何找到它 节点:4796未处理PromisejectionWarning: ChildProcessError:命令失败:网络使用Z:\server/P:Yes/user:username密码 发生系统错误67 找不到网络名称 net use Z:\server/p:Yes/user:username密码已退出,错误代码为2 在回调C:\app\l

我正在尝试使用windows网络驱动器模块和fs模块写入映射的网络驱动器输入节点

如何获取连接和写入远程位置的路径

我需要通过驱动器号吗?如果是,我如何找到它

节点:4796未处理PromisejectionWarning: ChildProcessError:命令失败:网络使用Z:\server/P:Yes/user:username密码 发生系统错误67

找不到网络名称

net use Z:\server/p:Yes/user:username密码已退出,错误代码为2 在回调C:\app\location\node\u modules\child process promise\lib\index.js:33:27 在ChildProcess.exithandler child_process.js:279:5 在ChildProcess.emit events.js:159:13 在maybeClose internal/child_process.js:943:16 在Process.ChildProcess.\u handle.onexit internal/child\u Process.js:220:5 名称:“ChildProcessError”, 代码:2,, 子进程:

{ChildProcess:{[Function:ChildProcess]super:[Function]}, fork:[函数], _forkChild:[函数], exec:[函数], execFile:[函数], spawn:[函数], spawnSync:[函数:spawnSync], execFileSync:[函数:execFileSync], execSync:[函数:execSync]}, 标准输出:, stderr:'发生系统错误67。\r\n\r\n找不到网络名。\r\n\r\n'}

另外,该代码记录了Z

networkDrive.mount('\\\\server\\path\\to\\directory', 'Z', 'mdadmin', 'Password1!')
  .then(function (driveLetter) {
    console.log(driveLetter);
    fs.writeFile('L_test.txt', 'list', (err) => {
      if (err) throw err
    })
});

我不确定你得到了什么错误,所以这里有一些提示,当你使用

转义特殊字符

Windows使用\分隔目录。在JavaScript字符串中,并且必须像这样转义\\。e、 g.C:\file.txt将是字符串形式的C:\\file.txt

如果可以,请使用POSIX分隔符

由于读取带有转义\的路径会增加难度,我建议使用/来代替。windows网络驱动器应该可以处理这两个问题。e、 g.C:\file.txt将是字符串形式的C:/file.txt

范例

我试图使这个匹配您的示例,但做了一些更改,以便它可以在任何windows计算机上运行

let networkDrive = require("windows-network-drive");

/**
 * https://github.com/larrybahr/windows-network-drive
 * Mount the local C: as Z:
 */
networkDrive.mount("\\\\localhost\\c$", "Z", undefined, undefined)
    .then(function (driveLetter)
    {
        const fs = require("fs");
        const path = require("path");
        let filePath;

        /**
         * This will create a file at "Z:\message.txt" with the contents of "text"
         * NOTE: Make sure to escape '\' (e.g. "\\" will translate to "\")
         */
        filePath = path.join(driveLetter + ":\\", "message.txt");
        fs.writeFile(filePath, "text", (err) =>
        {
            if (err) throw err;
            console.log('The file has been saved!');
        });
    });

要从IIS中托管的REST服务进行写入,需要在服务器上正确设置权限

您需要设置站点的应用程序池的标识。 您需要授予写入权限,才能将该帐户或帐户组与您尝试写入的文件夹相匹配。 注意:如果通过操作系统将文件夹映射到网络驱动器号,则它仅在用户帐户级别定义

因此,如果已将文件夹位置映射到驱动器号(在本例中为“X:”),而不是写入 您必须写入完整路径

fs.writeFile('\\\\servername\\path\\to\\director\\test.txt', 'text', (err) => {
  if (err) throw err
})
注意:反斜杠需要转义,因此Windows文件系统将显示\\servername\path\to\directory之类的内容


注意:此答案包括用户l-bahr和CTZNKANE25的建议。

OK。我更新了问题以反映您的建议。如何访问已装入的驱动器的路径?请查看find方法。今天晚些时候,我将发布一个示例,但是您应该使用find来查看驱动程序是否已安装。如果不是他们,你就骑上去。两者都将使您能够获取驱动器号。从这里开始编写文件,就像我在示例中所做的那样。从错误日志来看,您的起始斜杠数似乎不正确。应该是。。。Z:\\server/P。。。我可以在运行单元测试脚本时编写文件,但在REST服务器上运行时遇到问题。我可能在Windows IIS中遇到问题。我已向项目中添加了一个,这可能会有所帮助。如果您仍然有问题,请使用实际代码和您遇到的错误更新您的问题。在上次更新中,驱动器似乎正在安装。只要您有权限,就应该能够使用fs来写入文件。
fs.writeFile('X:/test.txt', 'text', (err) => {
  if (err) throw err
})
fs.writeFile('\\\\servername\\path\\to\\director\\test.txt', 'text', (err) => {
  if (err) throw err
})