【问题标题】:Problems Passing Arguments to a Node.js Script将参数传递给 Node.js 脚本的问题
【发布时间】:2019-10-19 16:28:48
【问题描述】:

我的 Node.js 脚本在命令行和 bash 脚本中的运行方式不同。一切都通过命令行正常运行,但是从 bash 脚本中运行时无法识别第二个参数。

我需要在 bash 脚本中以不同的方式传递参数吗?

server.js 提供了两个参数:
1. 命令(在本例中,通过 mySQL 更新表)
2. 表(通过 API 拉取数据更新的所需表)

命令行/脚本输入:

node server.js -update-table table1

server.js:

var args          = process.argv.slice(2);
var command       = args[0];

switch (command) {
  case '-update-table':
    var tableName = args[1];
    switch (tableName) {
      case 'table1':
           tableUpdateFunction.table1();
           break;

      case 'table2':
           tableUpdateFunction.table2();
           break;

      default:
           console.log('ERROR: Unknown Table Name ' + tableName)
           break;
    }
    break;
}

从脚本运行时的控制台(触发默认情况):

ERROR: Unknown Table Name table1

【问题讨论】:

  • 你能发布你的脚本吗?
  • tableName 的打印类型默认为console.log(typeof tableName)
  • This answer 将解释您的问题。而且我不明白为什么有人会否决您的问题,因为它似乎已经到位(打印输出需要考虑一下)。
  • @goodvibration:您的链接答案如何解释这个问题?链接的答案是关于 jQuery each 的一个方面。

标签: node.js bash


【解决方案1】:

我认为您很可能遇到了 Windows 行尾问题。如果您使用某些 Windows 实用程序准备脚本文件,然后在类 Unix 环境中调用它,那么命令行以 CR-LF 序列 (Windows) 终止的事实将导致编译用于在unix 环境下,因为 CR 将被视为普通字符。

这有点难看,因为 CR 在行尾是完全不可见的,只有在其他上下文中才能看到它的效果。您可以通过确保您在任何输出中替换的文本具有以下可见字符来使 CR 可见。例如,如果您将错误报告更改为:

console.log('ERROR: Unknown Table Name "' + tableName + "'")

那么你可能会看到:

"RROR: Unknown Table Name "table1

请注意ERROR 中的E 已被双引号覆盖;这是因为 table1 末尾的 CR 导致光标在打印以下 " 之前移回左侧边距。

【讨论】:

  • 谢谢!试图从 Windows 移植我的服务器,这正是我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
  • 2019-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多