Node.js 调用异步函数之前的行

Node.js 调用异步函数之前的行,node.js,express,Node.js,Express,因此,我正在构建一些简单的节点项目,并在停止节点的原始请求库时发出一些请求,但这种奇怪的事情一直在发生,并在异步函数作为函数之前调用任何东西 下面是我正在运行的代码 let express = require("express") let app = express() let bodyparser = require("body-parser") const got = require('got'); app.set("view engine", "ejs") app.get("/sear

因此,我正在构建一些简单的节点项目,并在停止节点的原始请求库时发出一些请求,但这种奇怪的事情一直在发生,并在异步函数作为函数之前调用任何东西

下面是我正在运行的代码

let express = require("express")
let app = express()
let bodyparser = require("body-parser")
const got = require('got');
app.set("view engine", "ejs")


app.get("/search", function(req, res){
    let query = req.query.pesq
    let url = "https://www.omdbapi.com/?s=" + query + "&apikey=thewdb"
    (async () => {
        try {
            const response = got(url);
            data = JSON.parse(response.body);
            console.log("fine here")
            res.render("search", {data: data})
            //=> '<!doctype html> ...'
        } catch (error) {
            console.log(error.code);
            //=> 'Internal server error ...'
        }
    })
})

app.listen(3000, function(){
    console.log("Server has started!")
})
我试图找出为什么异步函数前面的行被作为函数调用,如错误所示。我尝试在let url之后添加console.logcheck,但遇到另一个错误:

TypeError: console.log(...) is not a function
at /workspace/Bootcamp/MoviaApp/index.js:12:2
at Layer.handle [as handle_request] (/workspace/Bootcamp/MoviaApp/node_modules/express/lib/router/layer.js:95:5)
at next (/workspace/Bootcamp/MoviaApp/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/workspace/Bootcamp/MoviaApp/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/workspace/Bootcamp/MoviaApp/node_modules/express/lib/router/layer.js:95:5)
at /workspace/Bootcamp/MoviaApp/node_modules/express/lib/router/index.js:281:22
at Function.process_params (/workspace/Bootcamp/MoviaApp/node_modules/express/lib/router/index.js:335:12)
at next (/workspace/Bootcamp/MoviaApp/node_modules/express/lib/router/index.js:275:10)
at expressInit (/workspace/Bootcamp/MoviaApp/node_modules/express/lib/middleware/init.js:40:5)
at Layer.handle [as handle_request] (/workspace/Bootcamp/MoviaApp/node_modules/express/lib/router/layer.js:95:5)
但是我不知道为什么它会有这种奇怪的行为,以前打电话给我,可能是一些非常简单的事情,但我不知道。对不起,如果这个问题已经被回答了,但是我找不到答案


更新:在goturl函数之前添加了wait,但仍然返回相同的结果

您忘记调用异步函数,并且在调用时忘记了wait:

let express = require("express")
let app = express()
let bodyparser = require("body-parser")
const got = require('got');
app.set("view engine", "ejs")


app.get("/search", function(req, res){
    let query = req.query.pesq
    let url = "https://www.omdbapi.com/?s=" + query + "&apikey=thewdb"
    (async () => {
        try {
            const response = await got(url);
            data = JSON.parse(response.body);
            console.log("fine here")
            res.render("search", {data: data})
            //=> '<!doctype html> ...'
        } catch (error) {
            console.log(error.code);
            //=> 'Internal server error ...'
        }
    })()
})

app.listen(3000, function(){
    console.log("Server has started!")
})

您忘记调用异步函数,并且在调用时忘记了等待:

let express = require("express")
let app = express()
let bodyparser = require("body-parser")
const got = require('got');
app.set("view engine", "ejs")


app.get("/search", function(req, res){
    let query = req.query.pesq
    let url = "https://www.omdbapi.com/?s=" + query + "&apikey=thewdb"
    (async () => {
        try {
            const response = await got(url);
            data = JSON.parse(response.body);
            console.log("fine here")
            res.render("search", {data: data})
            //=> '<!doctype html> ...'
        } catch (error) {
            console.log(error.code);
            //=> 'Internal server error ...'
        }
    })()
})

app.listen(3000, function(){
    console.log("Server has started!")
})

我把它解决了,把一个;年底

let url = ("https://www.omdbapi.com/?s=" + query + "&apikey=thewdb")
所以就成了

    let url = ("https://www.omdbapi.com/?s=" + query + "&apikey=thewdb");

而且运行良好,可能与express库或Goorm IDE本身有关,但无论如何它都很奇怪;年底

let url = ("https://www.omdbapi.com/?s=" + query + "&apikey=thewdb")
所以就成了

    let url = ("https://www.omdbapi.com/?s=" + query + "&apikey=thewdb");

工作正常,可能与express库或Goorm IDE本身有关,但无论如何它都很奇怪。

您将字符串&apikey=thewdb作为函数调用

让我们重新排列一下代码,以便清楚地看到:

let url = "https://www.omdbapi.com/?s=" + query + "&apikey=thewdb"
(async () => { ...

let url = "https://www.omdbapi.com/?s=" + query + "&apikey=thewdb"(async () => ...
让我们将其改写为非常明显的内容:

let callback = async () => {
    try {
        const response = got(url);
        data = JSON.parse(response.body);
        console.log("fine here")
        res.render("search", {data: data})
        //=> '<!doctype html> ...'
    } catch (error) {
        console.log(error.code);
        //=> 'Internal server error ...'
    }
}

let string = "&apikey=thewdb";

let url = "https://www.omdbapi.com/?s=";
url = url + query;
url = url + string(callback); // you are calling the string as a function

您正在调用字符串&apikey=thewdb作为函数

让我们重新排列一下代码,以便清楚地看到:

let url = "https://www.omdbapi.com/?s=" + query + "&apikey=thewdb"
(async () => { ...

let url = "https://www.omdbapi.com/?s=" + query + "&apikey=thewdb"(async () => ...
让我们将其改写为非常明显的内容:

let callback = async () => {
    try {
        const response = got(url);
        data = JSON.parse(response.body);
        console.log("fine here")
        res.render("search", {data: data})
        //=> '<!doctype html> ...'
    } catch (error) {
        console.log(error.code);
        //=> 'Internal server error ...'
    }
}

let string = "&apikey=thewdb";

let url = "https://www.omdbapi.com/?s=";
url = url + query;
url = url + string(callback); // you are calling the string as a function

只是在goturl之前添加了wait,仍然得到相同的结果。我甚至试着复制你的全部代码,但没有成功只是在goturl之前添加了wait,仍然得到了相同的结果。我甚至试着复制你的全部代码,但没有成功。这与express无关。这是基本的javascript语法。看我的回答,这与快递无关。这是基本的javascript语法。现在我明白了,我认为不再需要使用分号了,所以我把所有的代码都没有分号了。在这里之前,我做的每件事都没有分号,所以我想我必须再次习惯于写分号。谢谢朋友哦,现在我明白了,我认为不再需要使用分号了,所以我把所有代码都没有分号了。在这里之前,我做的每件事都没有分号,所以我想我必须再次习惯于写分号。谢谢朋友