javascript - 服务器不听快递
问题描述
我正在快速创建一个项目以在 nodejs 中制作“Flask”。但由于某种原因,它根本不听。在控制台中,它显示listening on *:8080
,但页面不显示。代码:
index.js
const { Flask, render_template } = require('./flask');
const app = Flask(__dirname);
app.route('/',()=>render_template('index.html'),);
app.run(8080,'0.0.0.0',(p,h)=>{
console.log('\nlistening on *:'+p)
});
烧瓶.js
const express = require('express');
const app = express();
const fs = require('fs');
let request = {
cookies: {
get: (cookie)=>{},
obj: {}
},
headers: {}
}
app.use((req,res)=>{
const headers = req.headers;
delete headers.host;
delete headers['user-agent'];
delete headers.accept;
delete headers['accept-encoding'];
delete headers['accept-language'];
delete headers['if-none-match'];
delete headers['referer'];
delete headers['sec-ch-ua'];
delete headers['sec-ch-ua-mobile'];
delete headers['sec-ch-ua-platform'];
delete headers['sec-fetch-dest'];
delete headers['sec-fetch-mode'];
delete headers['sec-fetch-site'];
delete headers['sec-fetch-user'];
delete headers['upgrade-insecure-requests'];
delete headers['x-forwarded-for'];
delete headers['x-forwarded-proto'];
request.headers = headers;
});
function readdir(dirname, onFileContent, ) {
fs.readdir(dirname,function(err, filenames) {
onFileContent(filenames);
});
};
function isDir(path) {
try {
var stat = fs.lstatSync(path);
return stat.isDirectory();
} catch (e) {
return false;
}
}
app.use(require('cookie-parser')())
if(fs.existsSync('static')){
app.use(express.static('static'))
};
app.use((req,res,next)=>{
let entr = Object.entries(req.cookies);
for(var i=0;i<entr.length;i++){
if(typeof(entr[i][1])=='object'){
entr[i][1] = JSON.stringify(entr[i][1]);
}
request.cookies.obj[entr[i][0]] = entr[i][1];
}
});
function setErrorStatus(code, callback){
if(!file){
app.use((err,req,res,next)=>{
const status = res.statusCode;
res.status(status==200?500:code);
callback({
redirect: (loc)=>{res.redirect(loc);next()},
send_file: (fileName)=>{res.sendFile(fileName);next()}
});
});
};
}
function route(dir,call,method="GET"){
if(method == 'GET'){
app.get(dir,(req,res)=>{
res.send(call());
});
} else if (method == 'POST'){
app.post(dir,(req,res)=>{
res.send(call());
});
} else if (method == 'ALL'){
app.all(dir,(req,res)=>{
res.send(call());
});
} else {
app.get(dir,(req,res)=>{
res.send(call())
})
}
};
function render_template(file){
try{
return fs.readFileSync(__dirname+'/templates/'+file,'utf8')
} catch (e) {
let htii;
console.error(`Error: ENOENT\nNo file/dir called "templates/${file}.`);
process.exit(73);
}
}
function run(port=8080,host='0.0.0.0',callback=()=>{}){
app.listen(port,host='0.0.0.0');
return callback(port, host);
}
function flask(){
return {
route: route,
run: run,
// on: appon
}
}
function send_file(
fileName_or_fp,
as_download = false
){
if(res == null){ return; };
if(as_download){
res.download(fileName_or_fp);
} else {
res.render(fileName_or_fp);
}
}
module.exports = {
Flask: flask,
render_template: render_template,
request: request
}
模板/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Page</title>
</head>
<body>
<p>Flask Loaded!</p>
</body>
</html>
当我第一次加载它时,它显示一个空白页面,即使它应该/templates/index.html
在加载后显示文件。
我试过的:
- 卸载并重新安装 express 和 cookie-parser
- 测试快递
index.js
- 复制了同一个项目。
请帮忙。
注意:这不是另一个问题的重复。
解决方案
根据有关 middleware 的文档,您的中间件被传递了第三个参数,next
您应该调用该函数将请求传递给下一个中间件或最终路由处理程序。例如:
app.use(function (req, res, next) {
console.log('Time:', Date.now())
next()
})
在您第一次app.use
删除这些标头时,您不接受该参数,因此 Express 在您的中间件之后停止执行任何操作,包括不发送响应。
推荐阅读
- arrays - bash中的冒泡排序关联数组
- javascript - 如何在猫鼬中的 populate() 之后使用 .where().equal()?
- r - ggplot geom_smooth 无法为 lm 方法关闭 se
- mongodb - MongoDB:数组条目的有序匹配
- events - jupyterlab 按钮事件不起作用
- javascript - 为什么我的表单输出 NaN?
- tensorflow - 如何使用 tf.layers 类而不是函数
- pdfbox - 如何使用 PDFBox 从 PDF 文件中删除覆盖?
- c# - 为什么我的 ASP.NET ListBox 没有填充结果?
- python - 如何将两个列表合并到 Python 中的字典中?Dict 和 Zip 不起作用