开发者问题收集

在 Node.js 中运行 JS 文件

2017-12-26
84

我是自学者,在 Node.js 上运行测试文件时遇到问题。我使用以下命令:“node”。我不知道文档未定义是什么意思。在这种情况下,我输入的是 node test.js。任何帮助都很好。我面临以下错误:

PS C:\Users\buddys\Desktop\Projects> node test.js
C:\Users\buddys\Desktop\Projects\test.js:8
   document.write("Metri loves you too baby!");
   ^

ReferenceError: document is not defined
    at Object.<anonymous> (C:\Users\buddys\Desktop\Projects\test.js:8:4)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.runMain (module.js:604:10)
    at run (bootstrap_node.js:389:7)
    at startup (bootstrap_node.js:149:9)
    at bootstrap_node.js:504:3

现在,当我运行 index.html 时,JavaScript 正在写入网页。这是我的索引和 .js 文件:

index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>JavaScript Learning</title>

  </head>
  <body>
    <h1>JS for Metri</h1>
<p>blah blah blah</p>
<div class="content">

</div>

<!--place scripts at the bottom of the body unless big files. If it's a big files
Metri, make a separate .js file and link it to the HTML page by using src attribute. -->
<script src="test.js" charset="utf-8"></script>
  </body>
</html>

test.js

var youLikeMetri = true;
var age= 18;
var enter = 'You are permitted to be legally drunk';
var almost = 'You may legally smoke but not drink'
var exit= 'You are not permitted to be legally drunk';
//if statement if(condition){CODE BLOCK;}
 if (youLikeMetri){
   document.write("Metri loves you too baby!");
 }
//COMPARISON OPERATORS
//==EQUAL TO !=NOT EQUAL TO !==NOT IDENTICAL
//>=GREATER THAN OR EQUAL TO ||OR
//<=LESS THAN OR EQUAL TO &&AND
 if (age >= 21){
   document.write(enter);
 }
//elseif to create multiple conditions after first if.
else if(age <= 20){
  document.write(almost);
}

else if (age < 18){
  document.write(exit);
}
//while loops are continuous if the condition is met.
// while (condition){CODE BLOCK}
while (age <10) {
  console.log('You are less than 10');
  age++
  //adds one to age when age is > 10 it will continue down.
}
document.write('You are older than 10 now')
3个回答

document 不是标准 JavaScript 的一部分。它是 Web 浏览器提供的 API。

Node.js 不是 Web 浏览器,不提供 document 对象。

要从 Node.js 写入 STDOUT,您可以使用 process 模块

process.stdout.write("Hello, world");
Quentin
2017-12-26

文档在 Web 浏览器中属于 DOM,因为 nodeJS 不是客户端 javascript,所以您无法访问浏览器 DOM
但是如果您想在客户端应用程序上使用 nodeJS 模块,则可以使用 broserify

Glyphack
2017-12-26

您对前端(执行 test.js 的 index.html)和后端感到困惑。

node js 用于后端。您可以将其视为实现“Web 服务器”,将您案例中的 index.html 和 test.js 发送到浏览器。

适用于您的案例的工作示例:

var express = require('express')
, http = require('http')
, path = require('path');

var app = express();

app.set('port', process.env.PORT || 3000);

app.use(express.errorHandler());
app.use(express.static(path.join(__dirname)));

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

将其另存为 my_backend.js

执行:

npm install express

现在运行:

node my_backend.js

确保您的其他文件(index.html 和 test.js)保存在与 my_backend.js 相同的文件夹中。

现在,打开浏览器并输入:

http://127.0.0.1:3000/

它的作用是使用 express 框架创建一个 Web 服务器,该服务器在您的本地主机端口 3000 上监听,并在与 my_backend.js 相同的文件夹中搜索您从中请求的任何资源。

有关更多信息,请参阅任何node.js + express 教程。

Ziv Barber
2017-12-26