Node 只向客户端发送 html 内容,而不是发送整个 Vue 应用程序
Node only sends html content to the client instead of sending a whole Vue app
我用 CLI 创建了一个新的 vue 项目并想部署它。基于此文档
https://router.vuejs.org/guide/essentials/history-mode.html#html5-history-mode
我给路由器添加了历史模式。在 运行 npm run build
之后,我采用了静态本机 Node 服务器的示例代码
https://router.vuejs.org/guide/essentials/history-mode.html#example-server-configurations
const http = require('http')
const fs = require('fs')
const httpPort = 3000
http.createServer((req, res) => {
fs.readFile('../base/index.html', 'utf-8', (err, content) => {
if (err) {
throw err;
}
res.writeHead(200, {
'Content-Type': 'text/html; charset=utf-8'
})
res.end(content)
})
}).listen(httpPort, () => {
console.log('Server listening on: http://localhost:%s', httpPort)
})
所以当导航到 localhost:3000
时,vue 项目似乎正确加载
但我有一个空白页面,其中有两个错误
当我点击那些 js 文件时,它会显示 index.html 文件的内容。很明显js是无法理解这个html内容的。我该如何解决这个问题?
服务器不会一次性发送整个vue应用。
- 当您浏览到 url 时,浏览器从服务器获取 html 文件。
- 浏览器解析 html 文件。
- 浏览器检测资产(js、图像、css)。
- 浏览器请求这些文件。
它从服务器请求这些文件,但您还没有初始化服务器来查找这些文件。
所以,需要添加静态文件。
https://expressjs.com/en/starter/static-files.html
可以参考here
正如@Sukul 之前回答的那样,您只需要提供静态文件,因为您现在只有一个处理程序来处理 HTML 文件(挂载点文档)随附的所有请求及其请求时间*.js 应用程序它期待有效的 javascript 语法而不是它发现 HTML,并且网络选项卡上的错误消息是什么
const http = require('http')
const fs = require('fs')
const nStatic = require('node-static');
var fileServer = new nStatic.Server('./public');
const httpPort = 3000
const controllers = (req,res)=>{
if(req.url.includes(".")
return fileServer.serve(req, res);
else
fs.readFile('../base/index.html', 'utf-8', (err, content) => {
if (err) {
throw err;
}
res.writeHead(200, {
'Content-Type': 'text/html; charset=utf-8'
})
res.end(content)
})
}
}
http.createServer(controllers).listen(httpPort, () => {
console.log('Server listening on: http://localhost:%s', httpPort)
})
但是,我强烈建议您尝试使用 express.js
我用 CLI 创建了一个新的 vue 项目并想部署它。基于此文档
https://router.vuejs.org/guide/essentials/history-mode.html#html5-history-mode
我给路由器添加了历史模式。在 运行 npm run build
之后,我采用了静态本机 Node 服务器的示例代码
https://router.vuejs.org/guide/essentials/history-mode.html#example-server-configurations
const http = require('http')
const fs = require('fs')
const httpPort = 3000
http.createServer((req, res) => {
fs.readFile('../base/index.html', 'utf-8', (err, content) => {
if (err) {
throw err;
}
res.writeHead(200, {
'Content-Type': 'text/html; charset=utf-8'
})
res.end(content)
})
}).listen(httpPort, () => {
console.log('Server listening on: http://localhost:%s', httpPort)
})
所以当导航到 localhost:3000
时,vue 项目似乎正确加载
但我有一个空白页面,其中有两个错误
当我点击那些 js 文件时,它会显示 index.html 文件的内容。很明显js是无法理解这个html内容的。我该如何解决这个问题?
服务器不会一次性发送整个vue应用。
- 当您浏览到 url 时,浏览器从服务器获取 html 文件。
- 浏览器解析 html 文件。
- 浏览器检测资产(js、图像、css)。
- 浏览器请求这些文件。
它从服务器请求这些文件,但您还没有初始化服务器来查找这些文件。
所以,需要添加静态文件。
https://expressjs.com/en/starter/static-files.html
可以参考here
正如@Sukul 之前回答的那样,您只需要提供静态文件,因为您现在只有一个处理程序来处理 HTML 文件(挂载点文档)随附的所有请求及其请求时间*.js 应用程序它期待有效的 javascript 语法而不是它发现 HTML,并且网络选项卡上的错误消息是什么
const http = require('http')
const fs = require('fs')
const nStatic = require('node-static');
var fileServer = new nStatic.Server('./public');
const httpPort = 3000
const controllers = (req,res)=>{
if(req.url.includes(".")
return fileServer.serve(req, res);
else
fs.readFile('../base/index.html', 'utf-8', (err, content) => {
if (err) {
throw err;
}
res.writeHead(200, {
'Content-Type': 'text/html; charset=utf-8'
})
res.end(content)
})
}
}
http.createServer(controllers).listen(httpPort, () => {
console.log('Server listening on: http://localhost:%s', httpPort)
})
但是,我强烈建议您尝试使用 express.js