【问题标题】:Node/Express: How do I separate server side and client side javascript?Node/Express:如何分离服务器端和客户端 javascript?
【发布时间】:2020-07-08 05:32:50
【问题描述】:

我正在构建一个 JS 项目来学习新技能,但在区分客户端代码和服务器端代码时遇到了麻烦。当前设置是一个以 ExpressJS 作为依赖项的节点应用程序。

当我运行 npm run build && npm run dev 时,基本 html/css 会按预期提供,但我在控制台中收到来自 express 脚本的错误。

main.fb6bbcaf.js:116 未捕获类型错误:无法读取属性 未定义的“原型” 在 Object.parcelRequire.node_modules/express/lib/response.js.safe-buffer (response.js:42) 在 newRequire (main.fb6bbcaf.js:47) 在 localRequire (main.fb6bbcaf.js:53) 在 Object.parcelRequire.node_modules/express/lib/express.js.body-parser (express.js:22) 在 newRequire (main.fb6bbcaf.js:47) 在 localRequire (main.fb6bbcaf.js:53) 在 Object.parcelRequire.node_modules/express/index.js../lib/express (index.js:11) 在 newRequire (main.fb6bbcaf.js:47) 在 localRequire (main.fb6bbcaf.js:53) 在 Object.parcelRequire.js/main.js.express (main.js:1)

作为参考,我仍在尝试从 express 文档中获取示例代码以运行,所以我的整个 main.js 文件如下所示:

const express = require('express');
const app = express();
const port = 1234;

app.get('/hello', (req, res) => res.send('Hello World!'));

app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`));

我找到了一个有类似问题的人HERE,但是我没有点击(而且我似乎找不到合适的问题)是如何分离客户端和服务器端我的项目中的代码。我感觉我正在尝试在提供给客户的代码中使用 express,但我不知道该放在哪里。

在同时使用 node 和 express 的项目中是否有服务器端代码的最佳实践位置?

【问题讨论】:

  • 您显示的代码本身不会产生您显示的错误,因为该代码中没有正文解析器模块。我们需要查看导致该错误的实际代码。我不明白您为什么认为此错误与客户端 Javascript 有任何关系。
  • @jfriend00 这就是项目中所有的 js 代码。我从未使用过 body-parser 模块。它是作为依赖项的依赖项安装的。完成 html/css 后,我才开始研究 js。不必太吝啬。
  • 如果这就是您正在运行的所有代码,那么您的安装显然有问题。您需要卸载该目录中的 express 和任何其他模块,确保安装它们的 node_modules 目录完全干净。为你的应用清理你的 package.json 文件并从头开始重新安装 Express。我仍然完全不明白这个问题与客户端 Javascript 有什么关系。您在这里展示的只是服务器端 Javascript。
  • 而且,我建议您尝试运行 node main.js 以消除可能在您的 package.json 中作为麻烦来源的任何其他内容。

标签: javascript node.js express


【解决方案1】:

错误代码表明您在使用 Express 和 body-parser 模块时遇到问题。 让我们从头开始解决这个问题。

//通过命令行创建新项目

1)cd 到项目目录

2) 创建 app.js

3)npm init -y // 创建项目

4)npm install express body-parser //安装需要的模块

//打开app.js并使用以下代码配置服务器

const express = require("express");
const bodyParser = require("body-parser");

let app = express();
app.use(bodyParser.urlencoded({extended: true}));

app.get("/",function(req,res){
res.send("Hello world");
})


app.listen(3000, function() {
  console.log("Server started on port 3000");
});

//现在运行 app.js

1)node app.js

2)在浏览器中,转到“localhost:3000”

这应该可以解决您的问题。 当您向服务器发送请求时使用 body-parser。如果没有提交请求到您的服务器,它不应该显示任何正文解析器错误。

【讨论】:

  • npm init -y 中的 -y 有什么作用?
  • -y 就像对所有默认值说是,如果它让你感到困惑,只需将其删除并仅使用“npm init”,你就会明白我在说什么
  • 我创建的app.js 文件将用于服务器端代码,对吗?那么我应该把客户端 js 放在哪里呢?
  • 当你收到服务器请求时,你必须向客户端发送文件,这些文件应该通过 app.get("/",function(req,res){ res.sendFile(__dirname + "index.html") }) 你应该已经创建了 HTML 文件并存储在你的项目文件夹中。因此,当您在“localhost:3000/”收到请求时,您的 app.get() 会发送 HTML 及其相关的 CSS 和 JavaScript 文件(如果有的话)。
  • 注意:您没有客户端 JavaScript,因为您是在服务器端执行它。无需向客户端发送 JavaScript 文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 2014-02-18
  • 2015-06-06
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
相关资源
最近更新 更多