#node.js #express
#node.js #выразить
Вопрос:
Я сталкиваюсь с проблемой, когда я пытаюсь запросить изображение в формате .jpg. При поиске в Google я думал, что это как-то связано с Jest, но теперь, когда я начинаю с чистого проекта, не имеющего Jest в качестве зависимости, я получаю ту же ошибку.
В чем может быть проблема?
Это файлы, которые я пытаюсь запустить
server.js
// Import express framework
const express = require('express')
// Import routes
const visionAiRouter = require('./routes/vision-ai-route')
// Setup default port
const PORT = process.env.PORT || 4000
// Create express app
const app = express()
// Vision AI Route
app.use('/ai', visionAiRouter)
// Implement route for errors
app.use((err, req, res, next) => {
console.error(err.stack)
res.status(500).send('Something broke!')
})
// Start express app
app.listen(PORT, function() {
console.log(`Server is running on: ${PORT}`)
})
vision-ai-route.js
// Import
const express = require('express')
const visionAi = require('../controllers/vision-ai-controller')
// Create express router
const router = express.Router()
router.get('/', visionAi.labelDetection)
// Export
module.exports = router
vision-ai-controller.js
// Assets
const cat = require('./../data/cat.jpg')
// Create controller for GET request to '/users/all'
exports.labelDetection = async (req, res) => {
// Imports the Google Cloud client library
const vision = require('@google-cloud/vision');
// Creates a client
const client = new vision.ImageAnnotatorClient();
// Performs label detection on the image file
const [result] = await client.labelDetection(cat);
const labels = result.labelAnnotations;
const stringify = JSON.stringify(labels);
await res.json(stringify)
}
package.json
{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "server.js",
"dependencies": {
"@google-cloud/vision": "^2.1.1",
"express": "^4.17.1",
"nodemon": "^2.0.4"
},
"devDependencies": {},
"scripts": {
"start": "nodemon server.js"
},
"author": "",
"license": "ISC"
}
Трассировка стека
/Users/kod/Desktop/Code/Private/vision-ai/test/data/cat.jpg:1
����
^
SyntaxError: Invalid or unexpected token
at Module._compile (internal/modules/cjs/loader.js:721:23)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Module.require (internal/modules/cjs/loader.js:690:17)
at require (internal/modules/cjs/helpers.js:25:18)
at Object.<anonymous> (/Users/kod/Desktop/Code/Private/vision-ai/test/controllers/vision-ai-controller.js:3:13)
at Module._compile (internal/modules/cjs/loader.js:776:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
Комментарии:
1. Как вы можете использовать require? для файлов? вы должны указать полный путь к вашему файлу изображения. Может быть, как в папке images, вы можете разместить изображения и сделать папку images общедоступной. Спасибо
2. Я пытаюсь скомпилировать свой мозг в NodeJS из React и думаю, что все работает как React 😉 @paulsm4 Итак, в NodeJS вам всегда нужно записывать полный путь к файлу, и это не работает как React, где вы можете записать путь к файлу, относительный к файлу, который вы редактируете?
3. Как вы уже поняли, проблема не имеет ничего общего с путем … просто «require ()» не означает то, что вы, по-видимому, думали, что это так 🙂
Ответ №1:
Вам не может потребоваться файл без кода, поскольку require
он предназначен для загрузки исполняемого кода. Правильным эквивалентом было бы const cat = fs.readFileSync('./test/data/cat.jpg')
.
Комментарии:
1. Спасибо за разъяснение! Это сработало! Просто добавлю, что мне также пришлось отредактировать путь к файлу (на основе комментариев к моему сообщению).
2. Путь на самом деле относится к PWD приложения, так что вы, вероятно, сможете передать
./test/data/cat.jpg
, но чтобы быть однозначным, вы можете использоватьpath.join(__dirname, '../test/data/cat.jpg')
.__dirname
Глобальный доступен во всех Node.js модулирует и преобразует в каталог, в котором находится текущий файл.