Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么只有在我将警报添加到行末尾时,fetch才会在这里工作?Express+;NodeJS+;取来什么';这是个好办法_Javascript_Node.js_Express_Fetch - Fatal编程技术网

Javascript 为什么只有在我将警报添加到行末尾时,fetch才会在这里工作?Express+;NodeJS+;取来什么';这是个好办法

Javascript 为什么只有在我将警报添加到行末尾时,fetch才会在这里工作?Express+;NodeJS+;取来什么';这是个好办法,javascript,node.js,express,fetch,Javascript,Node.js,Express,Fetch,我正在使用NodeJS w/Express创建一个web应用程序,它使用VMSG库记录您的音频,并使用HTTP请求和multer将BLOB音频发布到我的文件系统。它还将记录实例添加到MongoDB数据库中 我对fetch命令有问题。除非我在抓取后立即发出警报,否则它不会工作。我设置它的方式是,我有我的主express应用程序(index.js)和一个到/recordingsDirectory(recordings.js)的路由器,这是处理帖子的端点。我的主索引HTML页面使用Handlebar并

我正在使用NodeJS w/Express创建一个web应用程序,它使用VMSG库记录您的音频,并使用HTTP请求和multer将BLOB音频发布到我的文件系统。它还将记录实例添加到MongoDB数据库中

我对fetch命令有问题。除非我在抓取后立即发出警报,否则它不会工作。我设置它的方式是,我有我的主express应用程序(index.js)和一个到/recordingsDirectory(recordings.js)的路由器,这是处理帖子的端点。我的主索引HTML页面使用Handlebar并使用一个单独的JS脚本(recorder.JS)1)使用VMSG库,2)在有人提交音频文件时,在/recordings目录中获取一篇文章,其中包含名称和音频块。这就是我被困的地方。我可以在获取之后使用警告行获取recorder.js,但是我不能单独将获取放在else if块的末尾。我不想这样做,因为警报很难看。我尝试过的一个解决方案是,我尝试使onsubmit函数异步并等待fetch,因为我认为它可能在等待承诺,但这不起作用

这是文件。我对您应该查看的代码行进行了批判性和超批判性评论,我认为问题出在哪里:

index.js

const express=require('express'))
常量车把=需要('express-Handlebar'))
const path=require('路径')
const XMLHttpRequest=require('XMLHttpRequest')。XMLHttpRequest
const xhr=new XMLHttpRequest()
const db=require(“./db”)
const app=express()
const PORT=process.env.PORT | 8000
应用程序集(“查看引擎”、“hbs”)
附件发动机('hbs',把手({
layoutsDir:path.join(_dirname,'views','layouts'),
extname:'hbs',
defaultLayout:'索引',
partialsDir:path.join(uu dirname,'views','partials'),
}))
app.use(express.json())
app.use(express.urlencoded({extended:false}))
应用程序使用((错误、请求、恢复、下一步)=>{
if(语法错误的错误实例err&&err.status==400&&err中的“body”){
返回res.status(400).send({status:404,message:err.message})
}
下一个()
})
应用程序获取(“/”,(请求,请求)=>{
res.render('main'{
标题:“主页”
})
})
app.get('/recordings',(req,res)=>{
var database=db.get().db('AudioJungle')
database.collection('recordings').find().sort({“date”:-1}).toArray(函数(err,docs){
res.render('录制'{
标题:"录音",,
录音:文件
})
})
})
//关键的
app.use('/recordingsDirectory',require('./recordings/recordings'))
应用程序使用(express.static('public'))
app.use('/scripts',express.static(path.join(\uuu dirname,'node\u modules','vmsg'))
数据库连接(功能(错误){
如果(错误){
console.log('无法连接到Mongo')
进程。退出(1)
}否则{
app.listen(端口,()=>console.log(`Listening on PORT:${PORT}`))
}
})
process.on('SIGINT',function(){
db.close(函数(){
console.log(“在应用程序终止时断开连接”);
进程退出(0);
});
});
应用程序使用((请求、恢复、下一步)=>{
资源状态(404)。发送({
现状:404,
错误:“未找到”
})
})
recordings.js(也称为获取文章的/recordingsDirectory端点)

const express=require('express'))
const router=express.router()
常量multer=require('multer')
常量fs=require('fs-extra')
常量db=require(“../db”)
const{ObjectId}=require('bson')
常数力矩=要求(‘力矩’)
const upload=multer({
存储:multer.diskStorage({
目的地:(请求、文件、回调)=>{
让路径='/公共/上载'
fs.mkdirsSync(路径)
回调(空,路径)
},
文件名:(请求、文件、回调)=>{
创建录制(请求)。然后((id)=>{
var file_name=id+'.mp3'
回调(空,文件名)
})
}
})
})
var type=upload.single('audio-file')
//关键的
router.post('/',type,(req,res)=>{
console.log('make it')
资源状况(200)
res.send('OK')
})
路由器.delete('/delete',(请求,res)=>{
deleteRecording(请求主体id)。然后((dbResponse)=>{
if(dbResponse==null | | dbResponse==未定义){
res.status(400).json({msg:'ID ready deleted'})
}否则{
资源状况(200)
}
})
})
路由器.get(“/”,(请求,res)=>{
var database=db.get().db('AudioJungle')
var recordings=database.collection('recordings')
findOne({“\u id”:ObjectId(req.query.id)},函数(err,result){
如果(错误)抛出错误
如果(结果==null | |结果==未定义){
返回res.status(400).json({
现状:404,
错误:“不再在数据库中记录”
})
}
资源状况(200)
res.json({
name:result.name,
日期:result.date
})
})
})
异步函数createRecording(req){
var database=db.get().db('AudioJungle')
var recordings=database.collection('recordings')
var audioObject={
名称:req.body.name,
日期:矩().格式('MMMM-Do-YYYY,h:mm:ss-a')
}
var dbResponse=wait recordings.insertOne(audioObject)
返回dbResponse.insertedId
}
异步函数deleteRecording(id){
var database=db.get().db('AudioJungle')
var recordings=database.collection('recordings')
var audioToDelete={
_id:ObjectId(id)
}
var deleteResult=等待录制。deleteOne(audioToDelete)
返回删除结果
}
module.exports=路由器
下面是脚本,其中包含音频和名称,并尝试获取(我需要警报,以便它实际处理到/recordings目录中)

recorder.js

从“/scripts/vmsg.js”导入{record}”;
乐