You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遵循Google NLP教程的Node+Express服务无法运行,报require不存在错误

解决方案

一、require不存在报错修复

出现该报错有两种常见原因,对应解决方案如下:

  • 如果你的项目package.json中配置了"type": "module",说明Node启用了ES Module规范,不支持CommonJS的require语法,可以二选一修复:
    1. 把const language = require('@google-cloud/language');替换为ES Module导入语法:import * as language from '@google-cloud/language';
    2. 删除package.json中的"type": "module"配置,退回CommonJS规范,require语法自动生效
  • 如果你的Express代码和React前端代码放在同一项目,且用前端打包工具(如Vite、CRA启动命令)运行项目,会把后端Node代码当成前端代码编译,前端环境原生不支持require。这种情况需要单独启动Express服务,使用node app.js或nodemon app.js命令运行后端入口文件,不要和前端打包命令混用。

二、现有接口逻辑修正

当前代码还存在两个可修复的逻辑问题:

  1. quickstart是异步函数,你没有加await就直接返回,前端会拿到Promise对象而非实际分析结果
  2. 你传递了req.params给quickstart但原函数没有接收参数,也没有用传入的文本做分析,参数传递无效

以下是修正后的完整参考代码(CommonJS规范版本):

// 依赖导入统一放在文件顶部,不要放在函数内部
const language = require('@google-cloud/language');
// 客户端实例全局初始化即可,不用每次请求都创建
const client = new language.LanguageServiceClient();

async function quickstart(text) {
  const document = {
    content: text,
    type: 'PLAIN_TEXT',
  };
  const [result] = await client.analyzeSentiment({document: document});
  return result.documentSentiment;
}

app.get('/sentiment', async (req, res) => {
  res.header('Access-Control-Allow-Origin', '*');
  console.log('sentiment was called'.green.inverse);
  // GET请求参数一般从query中获取,兜底默认文本
  const text = req.query.text || 'Hello, world!';
  try {
    const results = await quickstart(text);
    res.send(results);
  } catch (err) {
    console.error('Google NLP调用失败:', err);
    res.status(500).send({error: '文本分析失败'});
  }
});

三、额外注意事项

Google NLP SDK需要身份验证才能调用,你需要提前在Google Cloud控制台开通自然语言API,创建服务账号并下载JSON格式的密钥文件,启动Node服务前配置环境变量GOOGLE_APPLICATION_CREDENTIALS为你的密钥文件本地路径,否则API调用会返回权限错误。

内容的提问来源于stack exchange,提问作者jdog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:51:03